旧事新坑502_Bad_Gateway

NGINXPHP2014-06-06 16:24

配置过Nginx和PHP的同学,想必都遇到过502的错误。我就简单说一下,出现这个错误的原因有哪些:

  • Linux内核打开文件数量限制,我是没遇过
  • PHP的fastcgi没启动,简单,启动下就好了
  • PHP的fastcgi进程数量太少,也简单,加大进程数就可以
  • PHP的fastcgi执行时间限制太短,我去,增加下执行时间呗
  • PHP的fastcgi执行内存限制太小,还能不能好好耍了,加内存上限吖
  • PHP的fastcgi生命周期犹如蜉蝣,咳咳,赶紧让它多处理些请求再死去就好
  • PHP的session写失败,二进制安装的话,路径在/var/lib/php/session/,赋权限吧

还有乱七八糟的一堆原因的,我一时就想不到这么多了。报一下,我这次遇到的新坑是什么情况吧:

  • 打开phpinfo页面没问题(也就是php正常服务ing)
  • 配置PHPMyAdmin后,打开页面报502 Bad Gateway(开始是白屏,装上php-mbstring就好)
  • 放上「雅黑PHP探针」仍然是502的错误,但是我在另外的机器上,同样命令配置的环境却正常,抓狂

查看Nginx错误日志「recv() failed (104: Connection reset by peer) while reading response header from upstream」,嗯没用的提示。那再看看PHP的日志吧,嗯更没用的提示直接说cgi进程退出了。。。

这个问题困扰了我两天,最后在一个小论坛上,找到解决方法是删除掉eaccelerator.so扩展。
然后我抱着试试看的想法「把eaccelerator配置删除」/「把eaccelerator.so库删除」都可以,实际上把配置中的「eaccelerator.enable = "0"」禁用掉也行的。

接着当然是要找原因吖,放狗搜索「eaccelerator 502 bad gateway」找到一堆信息,大概意思就是eaccelerator的配置,要放在Zend Optimizer的配置之前,因为eaccelerator需要以Zend的一个extension的形式加载,不然PHP起不来。
但是我的PHP是起来了的,有进程也可以打开phpinfo页面,所以不确认是不是这个原因。而eaccelerator是不能被禁的,因为要用到。
最后的解决方案,是从其他的机器上拷贝了一个在用的eaccelerator.so库过来,就正常了(启动PHP的时候,可能会报扩展兼容的提示,毕竟编译版本不一定相同)

最后,报一下:
出问题的环境配置:php-5.3.3,eaccelerator-0.9.6;
正常服务的环境配置:php-5.3.21,eaccelerator-1.0-dev;
至于为什么同样的两个机器,使用同样命令配置出来的环境不一样,那是因为我使用的源不一致的原因。
我想说,这坑埋的让人不能好好的玩耍了。。。


原文链接: http://blog.jtwo.me/new-error-502-bad-gateway