LNMP一键安装包配置YII2.0

备注:php我用的版本是7.1.4的,最新的版本,之前用5.6版本的时候没有出现过这个问题

使用lnmp一键安装包搭建lnmp环境后,使用yii2.0框架测试时出现502报错,看到这个问题,

我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep php-fpm 截取 php-fpm 的进程,发现是有的

按照YII2.0官网的Nginx 配置如下

 1 server {
 2     charset utf-8;
 3     client_max_body_size 128M;
 4 
 5     listen 80; ## listen for ipv4
 6     #listen [::]:80 default_server ipv6only=on; ## listen for ipv6
 7 
 8     server_name mysite.local;
 9     root        /path/to/basic/web;
10     index       index.php;
11 
12     access_log  /path/to/basic/log/access.log;
13     error_log   /path/to/basic/log/error.log;
14 
15     location / {
16         # Redirect everything that isn't a real file to index.php
17         try_files $uri $uri/ /index.php$is_args$args;
18     }
19 
20     # uncomment to avoid processing of calls to non-existing static files by Yii
21     #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
22     #    try_files $uri =404;
23     #}
24     #error_page 404 /404.html;
25 
26     location ~ \.php$ {
27         include fastcgi_params;
28         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
29         fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
30 #fastcgi_pass unix:/tmp/php-cgi.sock;
31      try_files $uri =404;
32 }
33
34 location ~* /\. { 35 deny all; 36 } 37 }

 

其实问题就出现在  fastcgi_pass 127.0.0.1:9000; 

备注:php我用的版本是7.1.4的,最新的版本,之前用5.6版本的时候没有出现过这个问题

 

思路:发现php-fpm的listen是unix sock方式运行的,问题可能出在php-fpm上。

 

1、打开  /user/local/php/etc/php-fpm.conf 其中配置如下

 1 [global]
 2 pid = /usr/local/php/var/run/php-fpm.pid
 3 error_log = /usr/local/php/var/log/php-fpm.log
 4 log_level = notice
 5 
 6 [www]
 7 listen = /tmp/php-cgi.sock
 8 listen.backlog = -1
 9 listen.allowed_clients = 127.0.0.1
10 listen.owner = www
11 listen.group = www
12 listen.mode = 0666
13 user = www
14 group = www
15 pm = dynamic
16 pm.max_children = 20
17 pm.start_servers = 10
18 pm.min_spare_servers = 10
19 pm.max_spare_servers = 20
20 request_terminate_timeout = 100
21 request_slowlog_timeout = 0
22 slowlog = var/log/slow.log

2、我在网上也查看了下,说是其中 
fastcgi_pass为配置nginx与php-fpm的交互路径,一般有两种方式 
sock方式:fastcgi_pass unix:/tmp/php-cgi.sock; 
http方式:fastcgi_pass 127.0.0.1:9000; 
任选其中一种即可,

但必须和php-fpm的配置一致。 

但必须和php-fpm的配置一致。

但必须和php-fpm的配置一致。
后来我就在nginx的配置文件中加上一下代码

location ~ \.php$ {
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     fastcgi_pass unix:/tmp/php-cgi.sock;
     fastcgi_index index.php; try_files
$uri =404; 32 }

 

 

3、同时修改php-fpm的配置文件php-fpm.conf,将listen = 127.0.0.1:9000改为

listen = /tmp/php-cgi.sock
#这个是设置 /tmp/php-cgi.sock 权限用的
listen.owner = www
listen.group = www
listen.mode = 0660

 

再次重启ngix和php-fpm,问题解决 
这里写图片描述

总结: 
1、其实这个问题总体就是nginx与php-fpm的交互问题,看我们选择是sock方式还是http方式,但是不管选择哪一种,我们都需要统一 
2、我在网上看到有人说将max_children 进程改大,其实这种情况我之前遇到过,它适用于本来php运行正常,突然出现502的问题,这个问题是php-fpm队列满了,出现连接拒绝的错误。
3、还有人说将php-fpm配置文件里有backlog,backlog是linux服务器在socket处理连接数的定义,phpfpm默认为-1,将-1改为4096,重启php-fpm问题。 
4、其实我们不管选择哪一种,主要是针对自己的问题,先要看报错,然后再对症下药,不要这一种试试那一种试试。

posted @ 2018-03-13 16:26  iceman!  阅读(580)  评论(0编辑  收藏  举报