Nginx 502 Bad Gateway 排查清单:从 upstream 到超时配置

502 常见但不简单。它不是“某个单点报错”,而是 Nginx 和上游服务之间通信异常的结果。排查时如果顺序不对,很容易在日志里兜圈子。

1. 先确认 502 来自哪一层

先看是 CDN 返回 502,还是源站 Nginx 返回 502。响应头和日志来源不一致时,优先从最前面的代理层排查。

  • CDN 502:先检查回源健康和源站连接。
  • Nginx 502:重点看 upstream 可达性与超时。

2. 最快的四步检查

  1. 确认 upstream 进程是否存活、端口是否监听。
  2. 从 Nginx 机器直接 curl upstream,排除网络 ACL。
  3. 看 `error.log` 中是否有 `connect() failed` / `upstream timed out`。
  4. 确认最近发布是否改了 upstream 地址、协议或健康检查。

这四步能快速覆盖 70% 以上的 502 场景。

3. 常见触发类型与对应处理

  • 连接失败:应用没起来、端口错、容器未就绪。
  • 读超时:上游慢查询、线程池耗尽、下游依赖阻塞。
  • 响应头异常:header 过大、格式非法、协议不匹配。
  • 发布窗口抖动:滚动发布瞬间实例不足或探针过严。

4. 超时和缓冲参数要成组调整

只改 `proxy_read_timeout` 通常不够。若上游响应体较大,还要检查:

  • `proxy_connect_timeout` / `proxy_send_timeout` / `proxy_read_timeout`
  • `proxy_buffers` / `proxy_buffer_size`
  • `client_max_body_size` 与上游限制是否一致

参数要结合真实请求形态评估,避免“把超时调大掩盖慢请求”。

5. 线上应急建议

  • 优先回滚最近变更,恢复可用性。
  • 降低流量入口(限流、熔断、降级静态页)。
  • 保留故障窗口日志和配置快照,避免事后无法复盘。
502 的目标不是“消失”,而是“在高峰也可预测、可恢复”。

把 Nginx、上游应用和发布系统串成一条排查链,502 就不会再是随机事故。