nginx出现502 有很多原因,但大部分原因可以归结为资源数量不够用, 也就是说后端php-fpm 处理有问题,nginx 将正确的客户端请求发给了后端的php-fpm 进程,但是因为php-fpm 进程的问题导致不能正确解析php 代码,最终返回给了客户端502 错误。
服务器出现502 的原因是连接超时我们向服务器发送请求由于服务器当前链接太多,导致服务器方面无法给于正常的响应, 产生此类报错。因此如果你服务器并发量非常大,那只能先增加机器,然后按以下方式优化会取得更好效果; 但如果你并发不大却出现502 ,一般都可以归结为配置问题,脚本超时问题。
1. php.ini的 memory_limit 过小
(如果有个别php 程序进程需要占用极大内存时这个必须注意)
2. php-fpm.conf 中 max_children 或者 max_requests 设置不合理
(设置过小会因为没有足够的 cgi 进程处理请求,设置过大会出现一会儿有响应正常,一会儿等很久才有响应的情况,一般情况下 children 按 照内存计算,比如说 1G 设置 64 , 2G 128。这个根据实际情况自行调整。另外查看当前的 PHP FastCGI 进程数是否够用的命令为:
netstat -anpo |grep php-cgi | wc -l 如果实际使用的“FastCGI 进程数; 接近预设的;FastCGI 进程数,那么,说明;FastCGI 进程数; 不够用,需要增大。)
3. 查看 nginx 错误日志
发现 pstream sent too big header while reading response headerfrom upstream ,则检查client head buffer ,fastcgi buffer size 是否过小,可设置为32K 。
4. php程序执行时间过长而超时,检查nginx和fastcgi中各种timeout设置。
nginx:
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout300;
keepalive_timeout;
php-fpm:
request_terminate_timeout=300;
php.ini:
max_execution_time=300;
不过request_terminate_timeout参数会直接杀掉php进程,然后重启php进程,这样前端nginx就会返回104: Connection reset by peer,最好设成request_terminate_timeout=0;但最重要的是程序里要设置好超时,不要使用php-fpm的request_terminate_timeout。
5.php-fpm参数max_requests
该参数指明了每个children 最多处理多少个请求后便会被关闭。在大量处理请求下,如果该值设置过小会导致children 频繁的自杀和建立而浪费 大量时间,若所有的children 差不多都在这个时候自杀,则重建前将没有children 响应请求,于是502。可以将该值设置大一些或者是0[ 无限] 。
6.调高调高 linux 内核打开文件数量
可以使用这些命令( 必须是root 帐号)
echo 'ulimit -HSn 65536'>> /etc/profile
echo 'ulimit -HSn 65536'>> /etc/rc.local
source /etc/profile
7.缓存设置比较小
修改或增加配置到nginx.conf
proxy_buffer_size 64k;
proxy_buffers 512k;
proxy_busy_buffers_size 128k;
8、自己遇到 502 的解决办法:
调整增大php 和Nginx 的backlog 数,且nginx和php的backlog数相同。如:backlog=1000000
以上差不多是比较常见的502 的问题原因以及解决办法,其实解决问题的最好的方式还是自己去看nginx 和fastcgi 的errorlog 。
最后借用网上的万金油说法做个总结: php-cgi 进程数不够用、php 执行时间长、或者是php-cgi 进程死掉,都会出现502 错误。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com