前言
在现今时代,LNMP越来越多地开始取代LAMP的web服务器架构,即Nginx越来越多地代替了Apache2.0在web服务器上代理linux+mysql+php/perl的架构。同时,PHP的版本也已经更新到了php7.2,早已脱离了php5.4的时代。以笔者常用的php框架thinkphp为例,thinkphp在5.1版本时要求php版本大于5.5。在这种情况下,Nginx+php7.2的配置就显得十分必要。笔者在参考了百度上大量的教程后在此汇总备忘。
本文使用的服务器系统是CentOS7,请各位看官注意,如果是其他linux系统可以自己查找某些文件的目录。windows用户请绕行。
全文以root用户操作,非root用户请自行加上sudo
安装
参看笔者另一篇博文《CentOS7 开箱配置指南汇总(备忘)》。在此重复一下:
Nginx安装
先加载Nginx的源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum安装
yum install -y nginx
启动服务并加入开机启动项
systemctl start nginx.service
systemctl enable nginx.service
PHP7.2安装
添加源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum安装
yum -y install php72w
拓展包
yum -y install php72w-cli php72w-common php72w-devel php72w-mysql
php-fpm支持
yum -y install php72w-fpm
搭建测试文件
不需要搭建测试文件的读者可跳过此节
在/var/www/test/
下新建文件index.php
,写入:
<?php
phpinfo();
?>
Nginx 配置
在/etc/nginx/conf.d/
中新建配置文件(这是CentOS7的目录)
这只是一个范本,有额外需求(如https/ssl支持,请自行查找Nginx文档)。以代理上面的测试文件为例,要点已经写在注释上了。
server {
listen 80;
server_name localhost; # 改成要用的server_name(域名或者IP什么的)
root /var/www/test/; # 代理的网页所在目录
index index.html index.php index.htm; # 要加上index.php
location / {
client_max_body_size 256m; # (可选)这句话设定http请求的最大size,上传文件等要用。
root /var/www/test/; # 网页根目录所在目录
index index.html index.php index.htm; # 要加index.php
if (!-e $request_filename) { # php的一个重写
rewrite ^.*$ /index.php last;
}
}
location ~ \.php(.*)$ { # 匹配php文件,通过cgi调用php执行脚本
client_max_body_size 256m;
fastcgi_pass 127.0.0.1:9000; # php-fpm默认通过本机9000端口连接
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; # php框架(thinkphp)需要将路由分离
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
启动
重启php-fpm
systemctl restart php-fpm
重启nginx
systemctl restart nginx
如果报错,就去百度(逃)
权限问题
这时启动以后,经常会报403Forbidden或者502BadGateway,这个时候要把要访问的目录权限给nginx。比较方便的方法是直接把目录权限改成777
递归修改目录权限
chmod -R 777 /var/www/test
也有可能是SELinux的问题,记得把它关掉
Unix Socket连接
在linux上,系统提供了Unix Socket,其传速度和稳定性都远远高于端口传输。如果要将Nginx和PHP的连接改为Unix Socket,须做以下设置:
php-fpm配置修改
在/etc/php-fpm.d/www.conf
中(这是CentOS上的目录地址),按照下面的方法修改:
;listen = 127.0.0.1:9000 ;这是原来的
listen = /dev/shm/php-cgi.sock ;改成这样
其中,
/dev/shm/
这个目录是一个虚拟硬盘目录,是linux系统在内存中虚拟出来的磁盘目录,因此其运行速度和数据读写速度远远超过/tmp
目录,在数据储存不大的时候可以使用这个目录(这里仅仅是传输作用)
Nginx配置修改
在刚才的nginx配置文件中做如下修改:
#fastcgi_pass 127.0.0.1:9000; #这是原来的
fastcgi_pass unix:/dev/shm/php-cgi.sock; #改成这样
这个目录需要与刚刚在php-fpm中设置的一致,并且不要忘记unix:
权限问题
这个时候,还不能忘记把socket文件的权限设置成nginx和php-fpm可以访问的权限:
chmod -R 777 /dev/shm
这样就大功告成啦!