Nginx 502 Bad Gateway报错怎么解决——排查全流程

王尘宇 问题解答 4

Nginx 502 Bad Gateway报错怎么解决——排查全流程-第1张图片-王尘宇

502 Bad Gateway大概是建站人遇到最多的报错之一。它本身不是「网站坏了」,而是「中间层联系不上后面的程序」——对大部分网站来说,就是Nginx连不上PHP-FPM。所以排查的关键不是盯着502这三个字,而是找到「为什么连不上」。

第一步看PHP-FPM是不是挂了。执行 systemctl status php-fpm 或者 service php-fpm status,如果显示没在运行,重启一下:service php-fpm restart。很多502就是PHP-FPM进程被kill了,重启就好。这种情况多半是内存不足或者有人手动重启过。

第二步看进程池。PHP-FPM有一个参数叫pm.max_children,是同时能处理的最大请求数。用php-fpm日志看,如果出现「server reached pm.max_children」或者「no free slots」,说明请求太多进程不够,这时候调大这个参数,或者优化程序减少慢请求。

第三步看慢请求。某个接口执行时间太长,超过了Nginx的 fastcgi_read_timeout,默认60秒,Nginx就会返回502或504。用慢日志定位是哪段代码拖时间:打开php-fpm的slow log,设置 request_slowlog_timeout 为5秒,然后看是数据库查询还是外部接口卡住了。

第四步查Nginx配置。改了Nginx配置后没reload、fastcgi_pass指向的端口和php-fpm监听端口不一致,都会造成502。对照确认:fastcgi_pass 127.0.0.1:9000 就得保证 php-fpm 真在9000端口监听。改完配置记得 nginx -t 检查再 reload。

预防比排查重要:给PHP-FPM设合理的进程数和超时、数据库连接池别设太小、关键接口加缓存、再配一个进程监控,挂了自动拉起。把这几点做扎实,502会从「常客」变成「稀客」。

标签: Nginx 502 PHP-FPM 故障排查

发布评论 (0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~