网站突然返回 502 或 504,访客只看到一行报错。这两个错误几乎都出在「反向代理(如 Nginx)和后端程序之间」。本文教你快速定位。

1. 502 和 504 的区别

  • 502 Bad Gateway:Nginx 转发给后端时,后端没响应或直接挂了/连不上
  • 504 Gateway Timeout:后端有响应但太慢,超过了等待时间

2. 最常见的原因

  • 后端程序(Node / PHP-FPM / Python 等)挂了或没启动
  • Nginx 配的 proxy_pass 端口/地址不对,或后端换了端口。
  • 后端处理慢(慢查询、死循环、外部接口超时)→ 504。
  • 内存被打满,进程被系统 OOM 杀掉。

3. 排查步骤

  • 看后端在不在:用 pm2 list / systemctl status 服务 确认进程是否 running。
  • 看端口ss -lntp 看后端是否在监听 Nginx 转发的那个端口。
  • 看 Nginx 错误日志tail -f /var/log/nginx/error.log,502/504 会写明 connect refused 还是 timeout。
  • 本机直连后端curl http://127.0.0.1:端口,能通说明问题在 Nginx 配置,不通说明后端本身有问题。

4. 对应修复

  • 后端挂了 → 重启进程,并查它的日志找崩溃原因。
  • 端口不对 → 改 Nginx 的 proxy_pass,nginx -t 测试通过后 reload
  • 504 慢 → 优化慢查询/接口,或适当调大 proxy_read_timeout(治标)。
  • OOM → 加 swap 或升内存(见帮助中心「内存不足 OOM」一文)。