Nginx + php72w 配置指南(备忘)

前言

在现今时代,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

这样就大功告成啦!

猜你喜欢

转载自blog.csdn.net/a1323933782/article/details/89054308