先看error.log错误阶段和errno:connect() failed(111)→502,后端未监听;while reading response header(110)→504,超时配置或后端慢;upstream prematurely closed→后端主动断连,查OOM、worker耗尽。

直接看 error.log 里的错误阶段和系统错误码,就能快速区分是上游挂了(502)还是卡住了(504),再顺着线索查进程、端口或超时配置。
盯住日志里明确标注的错误阶段
Nginx 的 error.log 不只告诉你“出错了”,更会说明错在哪一环:
-
while connecting to upstream → 连接建立失败,典型如
Connection refused (111),说明后端根本没监听,先查服务是否启动、端口对不对、防火墙是否放行 -
while reading response header from upstream → 已连上但等不到响应头,这是 504 最常见位置,重点核对
proxy_read_timeout和后端实际处理耗时 - upstream prematurely closed connection → 后端主动断连,常见于 PHP-FPM worker 耗尽、应用 OOM 被杀、或 FastCGI 响应超时,要同步查后端日志和资源使用
按错误码反推系统级问题
日志括号里的数字不是随便写的,它对应 Linux 系统调用返回的 errno,能直指底层原因:
-
(111: Connection refused)→ 目标端口无服务监听,用ss -tlnp | grep :8000验证 -
(110: Connection timed out)→ TCP 握手成功但读响应超时,检查后端是否卡在 fork、数据库锁、或磁盘 I/O -
(113: No route to host)→ 网络层不通,目标 IP 不可达,优先排查路由、安全组、跨网段策略
结合时间戳做关联分析
502/504 往往不是孤立事件,而是连锁反应的起点:
- 如果某时刻起 error.log 突然密集出现
upstream prematurely closed connection,立刻去查同一时间点的应用进程状态:systemctl status your-app或journalctl -u your-app -S "2026-10-01 02:03:00" - 若同时发现大量
upstream timed out,且集中在某个接口路径(如/api/report),就去查该接口的慢查询日志或应用 trace,大概率是数据库连接池打满或单条 SQL 耗时飙升
别跳过 upstream 名称和 client IP
日志末尾的 upstream: "http://127.0.0.1:8000/..." 和 client: 192.168.1.100 是关键上下文:
- 多个 upstream 配置时,确认报错的是哪个后端集群,避免修错目标
- 同一 client IP 频繁触发 502,可能是恶意扫描或异常重试;若所有 client 都报错,则问题在服务端而非网络侧











