目录

nginx + php 突现502

现在web站点的大部分都是nginx+php-fpm的构架,在工作中我的Api突然出现502这样的错误,而且一直打不通,刚开始我以为是我的代码有bug,

不过在检查之后,发现代码是对的,然后就开始找nginx的“麻烦”了,然后就是各种查看nginx信息。 以下信息摘自网络:

502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时

查看当前的PHP FastCGI进程数是否够用:

1
netstat -anpo | grep "php-cgi" | wc -l

如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。

部分PHP程序的执行时间超过了Nginx的等待时间

可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

1
2
3
4
5
http{
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}

php.inimemory_limit设低了会出错,修改了php.inimemory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。

我将我搜索到的资源贴出来吧Nginx 502错误触发条件与解决办法汇总,网上有很多类似的解决方法,其实大同小异,但是我在查看完这些东西之后,发现我的问题还是没有解决,然后就向我的组长咨询了一下,他给我的建议是先查看日志,PHP-fpm日志中显示

1
2
[10-Oct-2016 12:05:32] WARNING: [pool www] child 14816 exited on signal 11 (SIGSEGV) after 15.570744 seconds from start
[10-Oct-2016 12:05:32] NOTICE: [pool www] child 14902 started

经过调试发现是Opcache的问题,应该是Opcache导致的内存不足,随即将10-opcache.ini文件中的opcache.enable 设置为0以便我的环境可以正常工作。

注:Opcache是PHP的一个加速组件,可以将PHP解析的代码缓存下来,但是缓存过大,也会影响整个站点的访问。