
502 Bad Gateway 是运维和站长最常遇到的故障之一,尤其在 Nginx+PHP 环境下极为普遍。出现 502 本质只有一个原因:Nginx 正常运行,但无法正常拿到 PHP 的返回结果。
本文整理一套从简单到复杂、新手也能一步步照做的排查方案,覆盖 99% 的 502 场景,看完就能自己解决问题。
一、先判断:是真故障还是临时波动
1、刷新页面,看是否偶尔正常
2、用其他浏览器 / 手机流量访问,排除本地网络问题
3、看是否只有个别页面 502,还是全站 502
偶尔出现 → 多半是 PHP 繁忙、超时、请求阻塞
全站一直 502 → PHP 服务挂了或配置严重错误
二、最常见原因:PHP-FPM 未启动或挂了
1. 检查 PHP 运行状态
service php-fpm status
或宝塔里看:软件商店 → PHP → 是否运行
2. 启动 / 重启 PHP
service php-fpm start service php-fpm restart
如果启动失败,基本是配置错误、内存不足、端口被占用。
三、PHP 进程满了,请求排队导致 502
这是最典型、最容易被忽视的 502 原因。
表现:
网站访问量一高就 502
晚上 / 高峰必出 502
重启 PHP 暂时好一会儿
解决:
1、进入 PHP 设置 → 配置文件
2、调高以下参数(根据服务器配置适当加大)
pm.max_children = 20 pm.start_servers = 8 pm.min_spare_servers = 5 pm.max_spare_servers = 15 pm.max_requests = 1000
3、重启 PHP-FPM
四、请求超时,PHP 执行太慢
Nginx 等不及 PHP 返回,直接返回 502。
需要同时改两处:
1. Nginx 超时配置
proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; fastcgi_connect_timeout 60; fastcgi_send_timeout 60; fastcgi_read_timeout 60;
2. PHP 最大执行时间
max_execution_time = 60 max_input_time = 60
改完重载 Nginx + 重启 PHP。
五、PHP 监听端口 / 路径配置错误
Nginx 找不到 PHP 入口,直接 502。
检查两点:
1、PHP 监听配置
listen = /tmp/php-cgi-81.sock # 或 listen = 127.0.0.1:9000
2、网站 Nginx 配置里必须对应一致
fastcgi_pass unix:/tmp/php-cgi-81.sock; # 或 fastcgi_pass 127.0.0.1:9000;
不一致就 502。
六、服务器内存不足,PHP 被系统杀死
表现:
top 看内存几乎 100%
dmesg 看到 Out of memory, kill process
PHP 频繁自动挂掉
解决:
1、关闭不必要插件、主题
2、降低 PHP 进程数
3、增加服务器内存或开启 SWAP
4、清理缓存、关闭内存占用大的功能
七、程序死循环、卡死,导致 PHP 阻塞
典型场景:
某个特定页面访问就 502
其他页面正常
一访问该页面 CPU 瞬间飙升
排查:
1、查看 PHP 慢日志
2、关闭最近新安装的插件 / 功能
3、检查代码里是否有无限循环、大循环查询数据库
八、磁盘满了,PHP 无法写入日志 / 会话
磁盘 100% 时:
Nginx 能运行
PHP 无法写日志、session、缓存
直接 502
解决:
df -h
看是否使用率 100%,清理日志、备份即可恢复。
九、防火墙、安全组拦截了 PHP 端口
极少出现,但也会发生:
安全组限制了 9000 端口本地访问
防火墙禁用了 Unix Socket 权限
简单验证:直接关闭宝塔防火墙临时测试。
十、一键排查总结(最快思路)
按这个顺序查,1 分钟定位 502:
1、看 PHP 是否启动
2、看磁盘是否满了
3、看内存是否爆了
4、看 PHP 进程数是否足够
5、看是否某个页面卡死
6、看超时配置是否太短
7、看 Nginx 与 PHP 监听配置是否一致
标签: 502 Bad Gateway 解决 Nginx 502 PHP-FPM 502 网站 502 原因 宝塔 502 修复


