rmdir.cn
← 排障手册

Nginx 502 排障

从配置、错误日志到上游监听,区分连接拒绝、超时与异常响应。

适用范围与前提

Linux 上的 Nginx HTTP 反向代理;需区分宿主机与容器网络。

  • 仅在获授权的主机上操作;日志可能需要 sudo。
  • 示例上游为 127.0.0.1:3000,替换为配置中的地址和只读健康检查路径。
  • 先记录故障时间、请求路径和近期变更,不先重启服务。

命令仅供手动复制到获授权的环境执行。站点不会连接服务器;涉及网络的诊断可能产生请求或登录审计记录。

1. 检查配置语法及实际加载配置

sudo nginx -t
sudo nginx -T

预期现象:语法检查成功;确认请求命中的 server/location 和 proxy_pass。完整配置可能含敏感信息。

2. 读取有限范围的错误日志

sudo tail -n 100 /var/log/nginx/error.log

预期现象:connect() failed 常见于连接拒绝;upstream timed out 表示连接或响应超时;prematurely closed 表示上游提前关闭。日志路径以实际配置为准。

3. 检查上游监听

sudo ss -ltnp

预期现象:上游端口应在 Nginx 可达的地址监听;容器中的 127.0.0.1 不等于宿主机。

4. 从 Nginx 所在网络环境检查上游

curl --max-time 5 -I http://127.0.0.1:3000/health

预期现象:此命令会在你的主机上发出请求;使用已确认安全的健康检查路径。HEAD 不支持时可能返回 405,不能直接判定服务宕机。

修复建议(需人工确认)

  • 备份相关配置并经人工确认后修正 upstream 地址或协议;先通过 nginx -t 再安排平滑加载。
  • 应用未运行时调查退出原因,由服务负责人决定恢复;不要循环重启掩盖问题。
  • 超时先调查应用、DNS、路由和访问策略,不盲目增大超时或关闭防火墙/SELinux。
完成经确认的修复后,验证恢复

验证恢复

  • 从上游和代理入口分别验证已授权的健康检查。
  • 观察错误日志和一段时间内的 5xx 变化,确认所有节点均恢复。

升级求助前收集

  • 故障时间及时区、命中节点、脱敏错误日志、上游地址、近期配置变更。
  • 不要直接分享 nginx -T 的完整输出或用户请求凭据。