网站突然返回 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」一文)。