1. 默认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值不够用。
  2. 在php.ini里,eaccelerator配置项一定要放在Zend Optimizer配置之前,否则也可能引起502 Bad Gateway。php一些模块之间也可能会造成502,如Zend GuardLoader与Opcache,ioncube与Zend GuardLoader等,一般可以通过注释掉一个然后重启php-fpm,然后看是否还502进行排除。
  3. 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重启使其生效。
  4. 磁盘空间不足,如mysql日志占用大量空间清理一下磁盘上的文件,有部分剩余空间,重启即可恢复。
  5. 查看php-cgi或php-fpm进程是否在运行
  6. 将nginx.conf里的 fastcgi_connect_timeout fastcgi_send_timeout fastcgi_read_timeout 都调大一点。
  7. 有时候也可能是自己修改过下面2处的配置,导致nginx配置文件里的设置和php-fpm上的设置不一样也会502。如果使用unix套接字, 修改/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。
  8. 有时候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; 之后重启试试。
  9. 如果虚拟主机的日志文件过大也可能会造成502问题。建议定期清空一下虚拟主机的日志文件。
  10. 有些程序或者程序的主题有死循环或其他非常占用资源的代码也可能会引起502,可以尝试暂时注释掉可能的主机的配置文件,重启看看是否还会502。
  11. 如果以上方法都试过,但还有时会出现502错,可以尝试添加502自动重启脚本:http://bbs.vpser.net/thread-1913-1-1.html
  12. 实在找不到原因可以开启slowlog看看慢日志是否有相关有用的信息:http://bbs.vpser.net/viewthread.php?tid=10251&page=1&

 


0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注