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() failed、upstream 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 是容量与性能