### [502、503和504有什么区别?反向代理与上游服务排查方法](https://www.jiyueip.com/article/8176) **Published:** 2026-07-22T19:47:11 **Author:** 斑斓助理 **Excerpt:** 502、503和504都可能由网关返回,但含义不同。本文从连接上游、服务可用性、响应超时、重试和多层代理日志说明排查方法。 用户说“网站报网关错误”,日志里却交替出现502、503和504。三者都可能由反向代理、API网关或负载均衡返回,但表达的故障阶段不同;把它们统一归为“后端挂了”,会浪费排查时间。 ## 三个状态码的常见含义 | 状态码 | 典型含义 | 常见证据 | | --- | --- | --- | | 502 Bad Gateway | 网关从上游收到无效响应或连接异常 | 连接拒绝、TLS失败、上游重置 | | 503 Service Unavailable | 服务暂时不可用 | 无健康节点、维护、限流、过载保护 | | 504 Gateway Timeout | 网关等待上游响应超时 | 连接或读取阶段超过期限 | 具体产品可能在不同条件下选择不同状态码,必须结合响应头、网关日志和配置解释。 ## 先找出是谁生成状态码 CDN、WAF、外层负载均衡、API网关和应用反向代理都可能生成错误页。查看Server、Via、请求ID和各层访问日志,但不要只凭错误页样式绝对判断。最可靠的方法是用统一请求ID和UTC时间串联每一层。 ## 502通常发生了什么 代理连接不上目标端口、上游在完整响应头之前断开、返回不符合HTTP格式的数据,或代理到上游TLS/SNI不匹配,都可能是502。若日志明确写connection refused,继续增加读取超时没有意义,应检查进程监听、地址、健康状态和防火墙。 ## 503是谁在保护谁 应用可以主动返回503,代理在无可用后端、连接队列满或触发熔断时也会返回503。若响应包含合理的Retry-After,客户端可据此延后重试。维护页面、容量限制与依赖熔断应有不同日志标签,便于区分计划事件和事故。 ## 504为何不能只调大超时 504说明网关在规定时间内没有拿到预期响应。真正耗时可能在DNS、建连、TLS、排队、应用计算、数据库或第三方接口。统一把超时从30秒改为300秒,会增加占用连接和内存的请求数量,故障高峰反而更严重。 ## 多层超时如何排列 外层客户端Deadline应覆盖合理业务时长,内层组件要留出返回错误和清理资源的窗口。若外层先超时,内层仍继续计算,就会产生无主请求;若内层过短,则正常慢请求也被提前切断。需要按完整调用链设计,而不是每层独立取默认值。 ## 健康检查通过仍会503 只检查TCP端口的健康探针可能认为节点可用,但应用线程池、数据库连接池或关键依赖已经耗尽。健康检查应反映接收新请求的能力,又不能执行过重查询拖垮系统。就绪与存活检查也要区分。 ## 上游重置与502 上游若发送TCP RST,代理可能转成502。关于RST来源、连接池和空闲超时,可参考[Connection Reset的分层排查](https://www.jiyueip.com/article/8168),客户端最终看到的502不代表代理本身就是最初故障点。 ## 重试要考虑幂等 GET等读取可有限退避重试,并换健康节点;POST写入可能已在上游执行,只是响应丢失。网关与客户端同时重试会成倍放大流量,应规定唯一责任层、最大次数、随机抖动和幂等键。 ## 建议记录的字段 - 请求ID、路由、方法、状态码与生成组件; - 选中的上游地址、连接时间、首字节时间和总耗时; - 重试次数、上游状态、响应标志与熔断原因; - 应用队列、线程池、连接池和依赖耗时; - 错误发生前后的发布、扩容和配置变更。 ## 结论 502、503和504分别提示上游响应异常、暂时不可用和等待超时,但真正根因仍需由生成层日志确认。沿着请求时间线核对连接、健康、容量和依赖,比统一扩大超时或无限重试更可靠。 **Tags:** HTTP代理, 代理技术选型, 服务器运维, 网络故障排查 **Categories:** 行业洞察 ---