首页/网络/协议速查/502 / 503 / 504 网关错误排障对照
HTTP 方法与状态码91 条

502 / 503 / 504 网关错误排障对照

网关三兄弟的定位口诀:502 上游没了,503 上游还在但我不服务,504 上游在但太慢。

协议速查网络更新于 2026-10-13

网关错误怎么区分

网关类的三个错误码最容易混淆,可以用一句话概括:连不上上游是网关错误,上游还在但服务自己暂时不接客是不可用错误,能连上但等不到结果就是超时错误。三者都出现在网关与上游之间,但第一现场不同——网关错误看连接失败日志,不可用看容量与维护状态,超时看上游响应时间。判断错了层级,所有后续动作都会落空。

基本信息

共同点错误都出现在网关与上游之间
区分依据连接是否建立、上游是否响应、响应是否超时
第一现场网关错误日志中的连接与上游相关行
排查入口连接失败看日志、容量问题看指标、超时看耗时分布
处置差异拉起后端、扩容限流、优化慢点

三个错误码对照

错误码语义第一现场常见动作
网关错误连不上上游或收到无效响应网关日志里的连接失败与上游相关行拉起后端,核对端口与协议
服务不可用暂时不服务,过载或维护限流器、维护开关与连接池指标扩容、限流、放出带重试提示的降级页
网关超时等待上游处理超过时限上游响应时间与慢查询日志优化慢点,长任务改异步,评估超时阈值

用日志快速分类

用日志快速分类
tail -100 /var/log/nginx/error.log | grep -E '502|503|504'   # 先看有哪些错误
# 按关键字归类:出现连接类关键字说明上游不可达
# 出现无可用上游说明健康检查全部失败
# 出现超时关键字说明上游处理太慢
tail -100 /var/log/nginx/error.log | grep -oE 'Connection refused|upstream timed out|no live upstreams|invalid response' | sort | uniq -c

处置要点

  • 上游不可达时先看进程与端口,再看监听地址与协议是否与网关配置一致
  • 服务不可用时先确认是主动降级还是被动过载,两者的修复路径相反
  • 超时类错误要区分是上游自身慢还是被排队拖慢,对照上游响应时间即可判断
  • 三类错误都要有自定义错误页,不要暴露网关默认页
  • 错误页要设短缓存,否则后端恢复了用户仍看到旧错误

排查要点

  • 先证明上游是否收到请求,再分析上游自己的日志,可以避免大量无效猜测
  • 把状态码与上游地址写进访问日志,事后分析不必重现现场
  • 同一错误码在不同网关层含义可能不同,以产生错误的那一层日志为准
三者的共同点都是「责任在服务端侧」,因此客户端能做的主要是退避重试;差别在服务端内部的修复动作完全不同,误判层级会让值班同学在错误的方向上耗费最宝贵的故障时间。
把错误页交给边缘节点缓存又不设置短缓存,会让后端恢复之后用户仍持续看到错误提示,必须手动刷新缓存才能恢复,故障时长被无谓拉长。

易错点

  • 把超时当成上游不可用,重启后端却没有解决任何问题
  • 把网关错误当成应用崩溃,反复检查应用日志却找不到异常
  • 错误页被长缓存,恢复后用户仍看到旧错误提示
  • 没有把上游地址与状态码写进日志,事后分析只能靠猜

数据来源与参考

  • RFC 9110 §15.6(5xx 定义)
  • Nginx 错误日志 upstream 相关说明

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌