502错误解决办法总结:
通常错误原因只分两方面:1.环境初始化的时候。2.某次修改代码之后出现502错误
针对问题1,通过查询服务器错误日志、PHP-fpm错误日志、以及其它各种错误日志。根据问题修改服务器配置、PHP.ini配置等方式解决,如上面前5条说明
针对问题2,必然是通过代码排查找寻代码错误,如6、7条记录
1. 2014/08/02 16:14:31 [error] 17029#0: *17941 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 210.61.12.2, server: blog.lixiphp.com, request: “POST /api/1.0 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”
php程序执行时间超过php-fpm.conf 中 request_terminate_timeout = 300;设置的值,然后php-fpm进程立即退出,
此时nginx得不到php-fpm进程的正确结果,响应502
解决:php-fpm.conf 的 request_terminate_timeout,最好设成 request_terminate_timeout=0;不限制超时
2. 报错: Nginx uwsgi (104: Connection reset by peer) while reading response header from upstream
说 uwsgi配置中 buffer-size 太小导致的这个问题,默认大小为4096 改大就好 比如:buffer-size=65535
参考: https://stackoverflow.com/questions/22697584/nginx-uwsgi-104-connection-reset-by-peer-while-reading-response-header-from-u
我也不知道‘uwsgi‘是什么东西,不知道配置在哪修改,希望有知道在评论中简单分享一下这两个问题。。
3. php-fpm进程数量来不及处理。
解决方法: 增大php-fpm进程数
4. 因为每个php-fpm在处理一定数量请求后自动stop,然后create new php-fpm
解决方法: 改pm.max_requests限制
5. 超过PHP执行时间
在php.ini和php-fpm.conf中分别有这样两个配置项:max_execution_time 和 request_terminate_timeout 。
这两项都是用来配置一个PHP脚本的最大执行时间的。当超过这个时间时,PHP-FPM不只会终止脚本的执行,
还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。
6. 代码错误 看到有一个前辈是 ip2long() ip转换时出错的
查看PHP-fpm日志,发现php-fpm疯狂终止,终端执行‘dmesg‘(看不懂里面是什么),
总之是因为代码原因导致产生 502 问题。
博客: https://www.cnblogs.com/sixiong/p/7048135.html
另一博客说查看php-fpm的错误log,发现 php worker 进程频繁地挂掉和拉起
原因是没有对redis的pconnect的返回值做判断,然后直接lpush,导致php worker进程直接core掉。
http://www.linuxidc.com/Linux/2012-11/75149.htm
7. 最终我的问题还是因为代码的原因,所以发现这个问题第一时间检查自己代码是哪里出现了问题。
查各种错误日志,一步一步跟代码,(本博客中有一些关于错误日志记录的方法,不了解朋友可以参考下php调试法记录)
然而在我的问题中,错误日志也不能找到是什么原因,只有上面那种错误提示。
好在我是通过git提交的,之前的版本是没有问题的,然后就还原版本,肯定是最近几个版本导致的,终于找到了错误的代码。
nginx常见参数错误总结: http://www.360doc.com/content/12/1024/11/1073512_243439687.shtml
Nginx使用教程(四):提高Nginx网络吞吐量之buffers优化 部分各种参数说明 https://www.cnblogs.com/felixzh/p/6283822.html