关于502 bad gateway错误的解决思路
查看nginx错误日志vim /usr/local/nginx/logs/nginx_error.log显示 :connect() to unix:/tmp/php-fcgi.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, req...
查看nginx错误日志
vim /usr/local/nginx/logs/nginx_error.log
显示 :
connect() to unix:/tmp/php-fcgi.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /2.php HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-fcgi.sock:", host: "localhost"
解决方法一:
[root@wwwwwwwz ~]# ll /tmp
srw-rw---- 1 root root 0 Feb 22 00:58 php-fcgi.sock
修改权限
[root@wwwwwwwz ~]# chmod 777 /tmp/php-fcgi.sock
[root@wwwwwwwz ~]# ll /tmp
srwxrwxrwx 1 root root 0 Feb 22 00:58 php-fcgi.sock
修改权限后测试成功
重启PHP 和 NGINX
[root@wwwwwwwz ~]#service php-fpm restart
[root@wwwwwwwz ~]#service nginx restart
[root@wwwwwwwz ~]# ll /tmp
srw-rw---- 1 root root 0 Feb 22 00:58 php-fcgi.sock
权限又恢复了原样
[root@wwwwwwwz ~]# vim /etc/init.d/php-fpm
在start) 的fi 后加上 chmod 777 /tmp/php-fcgi.sock
解决方法二:
配置错误 因为 nginx 找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port
修改php-fpm的配置文件
vim /usr/local/php/etc/php-fpm.conf
里面的 listen = /tmp/php-fcgi.sock 改为 listen = 127.0.0.1:9000
修改nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
里面的 fastcgi_pass unix:/tmp/php-fcgi.sock; 改为 fastcgi_pass 127.0.0.1:9000;
Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止,一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关。
以上转载至关于nginx 502 bad gateway 的错误解决思路
下面是另一种思路
常见的原因可能是php-cgi进程数不够用、php执行时间长(mysql慢)、或者是php-cgi进程死掉,都会出现502错误。
-
在安装好的环境中,运行一段时间出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。
-
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300
-
磁盘空间不足,可以使用 # df -h命令查看磁盘使用量
-
php-cgi进程死掉了。
通常的排查方法如下:
1、查看php fastcgi的进程数(max_children值)
# netstat -anop | grep php-cgi | wc -l
# netstat -anpo | grep php-fpm | wc -l
假如显示是5
2、查看当前进程
# ps aux | grep php-fpm 观察fastcgi/php-fpm进程数,假如使用的进程数等于或高于5个,说明需要增加。
3、调整/usr/local/php/etc/php-fpm.conf 的相关设置
pm.max_children = 5
request_terminate_timeout = 60
max_children最多5个进程,按照每个进程20MB内存,最多100MB。也就是1分钟。
max_children增多,则php-cgi的进程多了就会处理的很快,排队的请求就会很少。
但是设置max_children也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右。根据自己服务器购买的内存来实际决定。
request_terminate_timeout执行的时间为60秒,request_terminate_timeout值可以根据服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分钟都可以。
- 部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:
http
{
......
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
......
}
更多推荐
所有评论(0)