旧事新坑502_Bad_Gateway

Published: Tags: PHP NGINX

配置过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; 至于为什么同样的两个机器,使用同样命令配置出来的环境不一样,那是因为我使用的源不一致的原因。 我想说,这坑埋的让人不能好好的玩耍了。。。