502 Bad Gateway 主因是 PHP-FPM 异常,排查应先确认进程存活、再核对监听方式与权限、最后调参;勿盲目增大 pm.max_children,需结合内存压力合理配置动态子进程参数。

502 Bad Gateway 通常不是 Nginx 的锅,而是 PHP-FPM 挂了或拒绝响应
宝塔面板里网站报 502 Bad Gateway,90% 以上跟 PHP-FPM 进程异常有关——不是没启动,就是启动了但没正确监听、超时、被杀掉,或者子进程全忙完没空接新请求。Nginx 只是“传话的”,它连不上后端 PHP-FPM 才吐出这个错误。
排查顺序建议:先看 php-fpm 进程是否存活 → 再看 listen 地址和权限是否匹配 Nginx 配置 → 最后才调参数。别一上来就改 pm.max_children。
检查 PHP-FPM 是否真在运行,以及监听方式是否匹配 Nginx
宝塔默认用 socket(如 /www/wwwroot/xxx.sock)通信,但有时会因权限或路径问题失效;也有用户手动改成 127.0.0.1:9000 却忘了开防火墙或 SELinux(极少),导致 Nginx 连不上。
- 执行
ps aux | grep php-fpm确认主进程和子进程存在(至少两个:master + 若干 worker) - 查监听方式:
grep -E "listen|listen.owner" /www/server/php/<version>/etc/php-fpm.d/www.conf</version>,确认listen =值是 socket 路径还是127.0.0.1:9000 - 若为 socket,检查文件是否存在且权限对:Nginx 工作用户(通常是
nobody或www)必须有读写权限;ls -l /www/wwwroot/xxx.sock看属主和权限(推荐chmod 660+chown www:www) - 若为 TCP,确认
netstat -tlnp | grep :9000能看到php-fpm在监听,且宝塔站点配置里的fastcgi_pass是127.0.0.1:9000而非 socket 路径
调整 pm.* 参数前,先确认是不是真缺资源
盲目加大 pm.max_children 可能导致内存爆满、服务器卡死。PHP-FPM 子进程平均内存占用约 20–40MB(取决于扩展和代码),用 free -h 和 ps aux --sort=-%mem | head -10 先看真实内存压力。
立即学习“PHP免费学习笔记(深入)”;
-
pm = dynamic是宝塔默认,适合大多数场景;static仅在负载极稳定时考虑 - 关键三参数关系:
pm.start_servers≤pm.min_spare_servers≤pm.max_spare_servers≤pm.max_children - 保守调整示例(2GB 内存机器):
pm.max_children = 20、pm.start_servers = 5、pm.min_spare_servers = 3、pm.max_spare_servers = 8 - 改完必须重启:
service php-fpm-<version> restart</version>(宝塔后台点“重启”也行,但注意选对 PHP 版本)
超时类 502 很可能是 request_terminate_timeout 或 max_execution_time 不匹配
PHP 脚本执行太久,PHP-FPM 主动 kill 掉 worker,Nginx 等不到响应就返回 502。常见于导出大 Excel、处理图片、调外部 API 卡住等场景。
- 检查
request_terminate_timeout(PHP-FPM 层)和max_execution_time(PHP 层)是否一致或合理;宝塔默认是 0(不限制),但有些用户手动设成 30 秒,结果脚本跑 35 秒就被杀 - 临时调试可设
request_terminate_timeout = 300,同时在 PHP 代码开头加set_time_limit(300) - 更稳妥的做法是:把耗时操作拆成异步(如写入队列),而非硬扛超时限制
- 别忽略
request_slowlog_timeout,开启后能定位慢脚本:slowlog = /www/wwwlogs/php_slow.log,配合tail -f实时观察
宝塔改完配置不生效?大概率是没重启对应 PHP-FPM 实例,或者改错了版本目录下的 www.conf。多版本 PHP 共存时,/www/server/php/80/etc/php-fpm.d/www.conf 和 /www/server/php/74/etc/php-fpm.d/www.conf 是两套独立配置。



















