1. 准备工作
在安装 php7 和 nginx 环境之前,前置条件有:
1.1 更新系统
yum update
更新现有软件包以及新增安全补丁,确保系统有最新的版本。
1.2 安装EPEL源
yum install epel-release
在CentOS中,EPEL是一个可选的yum存储库,以提供高质量软件包,以及额外的软件包,这些软件包不在默认的CentOS存储库中。通过EPEL存储库,可以获取PHP7和Nginx。
1.3 安装必要的软件包
yum install -y gcc php php-fpm php-gd php-mbstring php-mysql php-pgsql php-xml php-xmlrpc php-pecl-zip nginx
以上命令为安装PHP7,Nginx和所有必要的PHP扩展。
安装完成后,接下来的任务是配置PHP和Nginx来运行网站。
2. 配置PHP
2.1 修改php.ini
首先,我们需要编辑php.ini来更改某些默认值。
nano /etc/php.ini
通过编辑php.ini文件,进行以下更改:
date.timezone = Asia/Shanghai
expose_php = off
max_execution_time = 120
max_input_time = 180
memory_limit = 256M
post_max_size = 50M
upload_max_filesize = 50M
请确保使用与您的时区对应的"Asia/Shanghai"。 其他值也可以根据您的需求进行更改。
2.2 配置PHP-FPM
PHP-FPM代表PHP FastCGI进程管理器,是一种替代传统CGI方法的PHP实现。 PHP-FPM是指定PHP网页服务器可用文件的一种替代方法。PHP-FPM提高了可伸缩性并将负载平衡分散到不同的PHP-FPM子进程中。
我们需要编辑系统中的PHP-FPM配置文件php-fpm.conf。
nano /etc/php-fpm.conf
做出以下更改:
listen = /var/run/php-fpm/php-fpm.sock
listen.owner=nginx
listen.group=nginx
listen.mode = 0660
此更改将套接字路径更改为/var/run/php-fpm/php-fpm.sock,nginx将使用它进行网页请求 ,并将套接字文件所有权和组更改为nginx 。 更改模式以使其可写,以允许写入。
然后我们需要编辑www.conf配置文件:
nano /etc/php-fpm.d/www.conf
首先请确保user和group变量设置为nginx:
user = nginx
group = nginx
然后,搜索并更改以下变量:
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
此更改将PHP-FPM配置为使用50个子进程处理并发网页请求。
3. 配置Nginx
接下来我们需要检查一下Nginx核心配置文件nginx.conf。
nano /etc/nginx/nginx.conf
找到以下行:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
使用以下内容替换前面的代码:
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
此更改将Nginx配置为使用PHP-FPM处理PHP。 当请求.php文件时,Nginx将使用PHP-FPM进行处理。
4. 安装SSL证书
最后一个任务是安装SSL证书以启用HTTPS传输协议。
4.1 安装Let's Encrypt
yum install certbot
4.2 获取SSL证书
certbot certonly --standalone --email example@mail.com -d example.com --agree-tos
请将example@mail.com和example.com更改为您的有效值。 如果尚未安装并配置DNS记录,则使用证书 -test-cert测试证书。
4.3 配置Nginx使用SSL
现在,我们需要编辑Nginx配置文件来使用新SSL证书(假设-certbot中的值为example.com)。
nano /etc/nginx/nginx.conf
对于HTTP,我们将内容更改为:
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
对于HTTPS,我们将内容更改为:
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Enable SSL
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
}
Nginx现在将使用SSL证书进行安全通信。
5. 防火墙规则
最后一个任务是将必要的防火墙规则应用于安全服务器。
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --reload
以上命令将通过防火墙添加可信HTTP和HTTPS服务。
6. 启动php-fpm和nginx服务
现在, 让我们启动php-fpm和nginx服务。
sudo service php-fpm start
sudo service nginx start
7. 测试
现在打开您的浏览器并在地址栏中输入您的域名(或IP地址)。 如果一切顺利,您将看到 Nginx 欢迎页面!
结论
CentOS 6.6上安装PHP7和Nginx环境需要一些必须的设置,并确保防火墙上存在正确的规则。通过按照上述步骤,您可以在VPS上轻松部署它,并且安全性得到最大程度的保证。