在使用lnmp环境时,偶尔会遇到nginx返回502错误,这里我以lnmp一键安装进行说明
原因一:安装时php没有安装成功
查看一下是否存在/usr/local/php/sbin/php-fpm
,如果没有肯定没安装成功。
原因二:eaccelerator配置项
在php.ini
里,eaccelerator
配置项一定要放在Zend Optimizer
配置之前,否则也可能引起502 Bad Gateway。php一些模块之间也可能会造成502,如Zend GuardLoader与Opcache,ioncube与Zend GuardLoader等,一般可以通过注释掉一个然后重启php-fpm,然后看是否还502进行排除。
原因三:php-cgi进程
在安装好使用过程中出现502问题,一般是因为默认php-cgi
进程是5
个,可能因为phpcgi
进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf
将其中的max_children
值适当增加,如果php已升级到5.3.*
以上且使用的是dynamic
模式,需要调整pm.min_spare_servers
和pm.max_spare_servers
的值适当增加。
最大值可以按内存xxMB/2/20
的整数来算(内存以MB为单位进行计算,/ 为除,取整数),最小值可以按内存/2/40
的整数来算,可以少点或多大,可以自己调整运行看看,同时pm.max_children
也调整为和pm.max_spare_servers
的值一样。
也有可能是max_requests
值不够用。
原因四:php执行超时
php执行超时,修改/usr/local/php/etc/php.ini
将max_execution_time
改为300
或直接改成0
不限制,同时还需要修改/usr/local/php/etc/php-fpm.conf
调整request_terminate_timeout
的值,再/etc/init.d/php-fpm restart
重启使其生效。
原因五:磁盘空间不足
使用命令df -h
查看一下磁盘空间,磁盘空间不足,如mysql日志占用大量空间清理一下磁盘上的文件,有部分剩余空间,重启即可恢复。
原因六:查看php-cgi或php-fpm进程是否在运行
查看php-fpm是否开启,命令:ps -ef|grep php
查看php-fpm的位置,命令:whereis php-fpm
原因七:nginx.conf配置
将nginx.conf里的
1 | fastcgi_connect_timeout |
都调大一点。
原因八:
https://bbs.vpser.net/thread-1654-1-1.html
原因九:
不要按网上找到的教程随便修改配置,网上找到的可能会路径不一样,也可能会导致502或有相关的错误产生,例如网上其他的教程可以使用的是9000
端口,而lnmp默认使用socket
,你如果按网上的教程设置的端口或socket
路径不一样那肯定100% 502无疑。
LNMP默认使用unix
套接字,虚拟主机配置文件里 fastcgi_pass
参数为unix:/tmp/php-cgi.sock;
需要确保/usr/local/php/etc/php-fpm.cnf
里的设置,php 5.2为/tmp/php-cgi.sock
php 5.3及以上版本为listen = /tmp/php-cgi.sock
,同时/usr/local/nginx/conf/nginx.conf
及其/usr/local/nginx/conf/vhost/
下面的虚拟主机配置里的fastcgi_pass unix:/tmp/php-cgi.sock;
不一致就必定502。
有时候unix
套接字模式下可能会502,可以尝试改成tcp/ip
的方式 php 5.2下/tmp/php-cgi.sock
替换为127.0.0.1:9000
php 5.3及以上版本listen = /tmp/php-cgi.sock
替换为listen = 127.0.0.1:9000
,nginx配置文件及虚拟主机配置文件里fastcgi_pass unix:/tmp/php-cgi.sock;
替换为fastcgi_pass 127.0.0.1:9000;
之后重启试试。
十、如果虚拟主机的日志文件过大也可能会造成502问题。
建议定期清空一下虚拟主机的日志文件。
十一、有些程序或者程序的主题有死循环或其他非常占用资源的代码也可能会引起502,可以尝试暂时注释掉可能的主机的配置文件,重启看看是否还会502。
十二、如果以上方法都试过,但还有时会出现502错,可以尝试添加502自动重启脚本:https://bbs.vpser.net/thread-1913-1-1.html
十三、实在找不到原因可以开启slowlog看看慢日志是否有相关有用的信息:https://bbs.vpser.net/viewthread.php?tid=10251&page=1&fromuid=3#pid30582
十四、升级PHP后出现502,可能php没升级成功。
如果是1.0之前的版本升级PHP到5.4或5.5后,可能是因为这个原因:https://bbs.vpser.net/thread-10763-1-1.html
十五、CentOS 6 下,wordpress访问后台、安装wp、安装插件报502错误的解决方法:https://bbs.vpser.net/thread-10767-1-1.html