Nginx 502错误服务器排查

打开网站看到醒目的 502 Bad Gateway,往往让人一头雾水。
别急,这个错误本质上就是 Nginx 作为反向代理时,没能从后端服务器(比如 PHP-FPM、Node.js 或 Java 应用)拿到有效响应。
下面我按操作顺序带你一步步排查,无论是用命令行还是宝塔面板,都能照着做。

排查前的准备工作

先在服务器上打开终端,或者进入宝塔面板的 SSH 终端。
确保你拥有 sudo 权限。
如果使用面板,大部分服务状态可以直接在面板左侧“服务”或“软件商店”里查看,但命令行会更准确。

第一步:检查后端服务是否在运行

502 最常见的原因是后端服务挂了。
先看看你的后端是什么:

  • 如果是 PHP 站点,一般是 php-fpm 服务。执行:

sudo systemctl status php-fpm (CentOS 7+)或 sudo systemctl status php7.4-fpm(按版本改)

  • 如果是 Node.js / Python / Java,检查对应进程:ps aux | grep nodesudo systemctl status your-app-name

如果服务显示 inactive (dead),启动它:sudo systemctl start php-fpm
然后立即刷新页面,可能就好了。

第二步:紧盯日志,找到具体错误

光看状态很模糊,日志才是关键。

  • Nginx 错误日志:默认位置 /var/log/nginx/error.log,用 tail -n 50 /var/log/nginx/error.log 看最后 50 行。
  • PHP-FPM 错误日志:常见路径 /var/log/php-fpm/error.log/var/log/php7.4-fpm.log,同样 tail 查看。

常见错误有:

  • connect() to unix:/var/run/php-fpm.sock failed —— 说明 Nginx 连不上 PHP-FPM 的 socket。检查 socket 路径是否一致,或者重启 php-fpm 重新生成。
  • Primary script unknown —— 通常是 fastcgi 配置中 SCRIPT_FILENAME 写错了路径。
  • upstream timed out —— 后端响应太慢,需要增加超时时间。

第三步:检查端口和监听状态

如果是 TCP 方式连接后端(比如 Nginx 代理 127.0.0.1:9000),确认端口在监听:
sudo netstat -tlnp | grep 9000
如果没输出,说明 php-fpm 没监听该端口,去 /etc/php-fpm.d/www.conf 检查 listen = 127.0.0.1:9000 是否正确,并重启。

如果你用的是宝塔,可以在面板“软件商店”对应软件的“配置”里直接编辑。

第四步:资源耗尽也是元凶

有时候服务明明在运行,但 502 间歇出现。
查看系统资源:

  • 内存:free -h,看看是否 swap 占用过多。
  • 进程数:ps aux | wc -l,如果进程数接近 ulimit -u 限制,说明进程资源耗尽。
  • PHP-FPM 子进程数:查看 pm.max_children 设置,如果并发请求超过这个数,新请求会直接被拒绝,返回 502。适当调大(比如从 50 调到 80),同时监控内存,避免 OOM。

避坑指南

  • 重启服务后立刻再看一次状态,确认重启成功。有时候 systemctl 提示启动成功,但实际因为配置错误又退出了。
  • 修改配置后一定要 reload 而不是 restart:sudo systemctl reload php-fpmnginx -s reload。restart 会导致瞬间中断。
  • selinux 或 apparmor 可能阻止 Nginx 连接后端,临时关闭测试:setenforce 0,如果问题消失再配置策略。
  • 如果你用的是宝塔面板内置的 Nginx 防火墙,有时会误封,进面板“安全”里检查。

高频问题解答

Q: 重启所有服务后还是 502?
A: 检查日志提到的具体错误地址。最常见的是 php-fpm socket 路径不匹配,或 fastcgi_pass 写的是 TCP 但服务监听的是 Unix socket。

Q: 502 和 504 有什么区别?
A: 502 表示后端完全没响应(拒绝连接或主动关闭),504 表示后端响应了但时间太长,超时后 Nginx 自己中断了。

Q: 间歇性 502 怎么排查?
A: 用 watch -n 2 'date; curl -I http://localhost' 不断请求,同时在另一个窗口看 tail -f /var/log/nginx/error.log,抓住异常时刻的日志。

如何确认问题已解决

刷新网站,页面正常加载就是最直接的验证。
更稳妥的做法是:

  • 用 curl 测试:curl -I http://你的域名,返回状态码 200。
  • 检查日志最后几行没有新的错误。
  • 再模拟高并发(100 个并发请求):ab -n 200 -c 10 http://你的域名/,确保所有请求都成功。

Nginx 502 错误通常不是玄学,只要按日志线索顺藤摸瓜,再配合状态检查和配置调整,绝大多数都能在 10 分钟内解决。
下次遇到,先别急着重启服务器,按本文步骤走一遍,你也能稳如老手。

分享到:
上一篇
Nginx跨域问题API中转解决:零基础配置教程
下一篇
Nginx配置压缩提升页面速度:Nginx配置压缩加速页面加
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意