LNMP一键安装包的Nginx 502 Bad Gateway错误可能原因及解决方法
今天一个安装lnmp的VPS频繁出现502 Bad Gateway错误,然后再军哥的网站找到一个解决办法的文章,转载过来方便后来人。
第一种原因:安装lnmp一键安装包时php没安装成功而出现502 Bad Gateway,从0.9开始只要安装成功或失败都就会有提示。没安装成功一般原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。可以看一下是否存在/usr/local/php/sbin/php-fpm ,如果没有肯定没安装成功
解决方法:
可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的,在网上搜索一下,或者把错误信息发上来。如果实在不会提供按http://lnmp.org/install.html这个安装时的lnmp.log日志文件(可以用winscp登陆下载lnmp.log,压缩并上传到本论坛),没有错误信息我们没法说什么原因。本方法只限于lnmp没安装成功,只要lnmp安装成功了这一项就没可能。
第二种原因:
在php.ini里,eaccelerator配置项一定要放在Zend Optimizer配置之前,否则也可能引起502 Bad Gateway
第三种原因:
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加,如果php已升级到5.3.*以上且使用的是dynamic模式,需要调整pm.max_spare_servers参数的值。
也有可能是max_requests值不够用。
第四种原因:
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300
第五种原因:
磁盘空间不足,如mysql日志占用大量空间清理一下磁盘上的文件,有部分剩余空间,重启即可恢复。
第六种原因:
查看php-cgi进程是否在运行
第七种原因:
将nginx.conf里的
fastcgi_connect_timeout
fastcgi_send_timeout
fastcgi_read_timeout都调大一点。
第八种可能原因:http://bbs.vpser.net/thread-1654-1-1.html
九、也可以尝试将unix套接字改成tcp/ip的,修改/usr/local/php/etc/php-fpm.cnf 里设置<value name=“listen_address”>/tmp/nginx.socket</value> 改成<value name=“listen_address”>127.0.0.1:9000</value> ,同时/usr/local/nginx/conf/nginx.conf 及其/usr/local/nginx/conf/vhost/ 下面的虚拟主机配置里的fastcgi_pass unix:/tmp/php-cgi.sock; 替换为fastcgi_pass 127.0.0.1:9000; 之后重启试试。
十、如果虚拟主机的日志文件过大也可能会造成502问题。
建议定期清空一下虚拟主机的日志文件。
十一、有些程序或者程序的主题有死循环或其他非常占用资源的代码也可能会引起502,可以尝试暂时注释掉可能的主机的配置文件,重启看看是否还会502。
十二、如果以上方法都试过,但还有时会出现502错,可以尝试添加502自动重启脚本 http://www.deepvps.com/nginx-502-bad-gateway-automatically-restart-script.html。
[复制本文链接发送给您的好友]
沙发为空,还不快抢?[点此发言]