HTTP 5xx含义

1. HTTP 5xx 的本质

1.1 定义
5xx 是服务器端错误,说明请求已经到达服务侧,但在处理链路的某个环节失败了

1.2 共同特征

  • 客户端请求通常没有语法错误
  • 问题发生在 应用 / 网关 / 上游依赖
  • 对 SRE 来说,这是稳定性与架构设计的核心观察指标

2. 500 / 502 / 504 的精确区分

2.1 500 Internal Server Error

  • 含义:应用程序内部异常

  • 出错位置:当前服务本身

  • 典型原因

    • 程序抛异常(NullPointer / Panic / Fatal Error)
    • 配置错误(环境变量缺失、权限错误)
    • 代码 Bug / 资源耗尽(OOM、FD 用尽)

一句话定位法

请求已进服务,但服务在执行过程中失败

SRE 信号

  • 应用日志里一定有 ERROR / Stack Trace
  • 通常伴随 CPU 飙高、内存泄漏、进程崩溃

2.2 502 Bad Gateway

  • 含义:网关收到非法或异常的上游响应

  • 出错位置:网关 ↔ 上游服务之间

  • 典型原因

    • 上游服务没启动 / 崩溃
    • upstream 端口不通、RST
    • 上游返回了非 HTTP 协议数据
    • 容器刚启动,端口未 ready

一句话定位法

网关能连,但上游给的响应不合法

SRE 信号

  • Nginx / Envoy error.log 有 connect() failedupstream prematurely closed
  • 后端日志可能是空的(请求根本没处理完)

2.3 504 Gateway Timeout

  • 含义:网关在规定时间内没等到上游响应

  • 出错位置:网关等待上游阶段

  • 典型原因

    • 上游接口执行过慢(慢 SQL / IO 阻塞)
    • 上游线程池耗尽
    • timeout 配置过小
    • 级联调用雪崩

一句话定位法

上游还活着,但处理太慢

SRE 信号

  • access log 响应时间 ≈ timeout 值
  • 上游 CPU 不高,但 RT 极大
  • 慢查询日志暴涨

3. 请求路径

flowchart LR
Client --> Gateway
Gateway -->|正常转发| Upstream
Upstream -->|异常崩溃| Gateway:::bad -->|502| Client
Upstream -->|处理超时| Gateway:::timeout -->|504| Client
Upstream -->|代码异常| 500:::error --> Client

classDef bad fill:#ffcccc
classDef timeout fill:#fff2cc
classDef error fill:#ffd6a5

4. 状态对照表

状态码 谁出问题 核心关键词 第一排查点
500 应用自身 异常 / 崩溃 应用日志
502 网关 ↔ 上游 连接异常 网关 error.log
504 上游性能 超时 慢日志 / RT

500 是代码质量
502 是部署与连接
504 是容量与性能