温馨提示×

怎么排查502错误

小樊
34
2026-08-17 21:21:34
栏目: 编程语言

排查 502 Bad Gateway 的核心思路是:先定位是网关/代理层问题,还是上游服务问题。下面按“由外到内、由快到准”的顺序给你一套通用排查流程,适用于 Nginx、CDN、K8s Ingress、API Gateway 等常见场景。


一、先快速确认 502 的本质

502 表示:

网关/代理服务器 能收到请求,但上游服务返回了无效响应或没响应

常见链路:

客户端 → 网关(Nginx/CDN/Ingress) → 上游服务(Java/Go/Node/PHP)

二、第一步:确认是“谁”在返回 502

1️⃣ 看响应头

浏览器 DevTools / curl:

curl -I https://example.com

常见特征:

  • Server: nginx → Nginx 返回
  • Via: 1.1 vegur → CDN / 云厂商
  • X-Cache: Error → CDN 问题

结论

  • 如果是 Nginx / CDN / Ingress 返回 → 重点查网关配置和上游

三、第二步:查网关层(最常见)

✅ Nginx 场景

1️⃣ 看 Nginx error.log(最重要)

tail -f /var/log/nginx/error.log

常见错误:

  • connect() failed (111: Connection refused)
  • upstream timed out
  • no live upstreams
  • recv() failed (104: Connection reset by peer)

✅ 说明:

  • Connection refused → 服务没启动 / 端口错
  • Timeout → 服务慢 / 健康检查失败
  • Reset → 服务崩了 / 被 kill

2️⃣ 检查 upstream 配置

upstream backend {
    server 127.0.0.1:8080;
}

确认:

  • IP 是否正确
  • 端口是否真的在监听
ss -lntp | grep 8080
netstat -tulnp | grep 8080

3️⃣ 检查 Nginx 是否真的能访问上游

curl http://127.0.0.1:8080/health
  • 返回正常 → Nginx 配置或超时问题
  • 返回异常 → 上游服务问题

四、第三步:查上游服务

1️⃣ 服务是否存活

ps -ef | grep java
systemctl status your-service

2️⃣ 端口是否监听

ss -lntp

3️⃣ 服务是否 crash

查看:

  • 应用日志
  • stdout / stderr
  • systemd journal
journalctl -u your-service -n 100

常见原因:

  • 启动失败
  • OOM 被 kill
  • 启动端口被占用

五、第四步:超时 & 负载问题(非常常见)

Nginx 常见超时导致 502

proxy_connect_timeout 5s;
proxy_read_timeout 30s;
proxy_send_timeout 30s;

✅ 排查:

  • 上游接口是否慢
  • 是否有大查询 / 死锁
  • 是否有 GC 停顿(Java)

六、第五步:容器 / K8s / 云环境

✅ Kubernetes

1️⃣ Pod 状态

kubectl get pods
kubectl describe pod xxx

2️⃣ Ingress / Service

kubectl get svc
kubectl get ingress

3️⃣ Service 是否选中 Pod

kubectl get endpoints

✅ 常见原因:

  • Pod 没 Ready
  • readinessProbe 失败
  • Service selector 不匹配

七、第六步:CDN / 云厂商问题

常见原因:

  • 源站 IP 变化
  • 回源端口错误
  • HTTPS 证书不匹配
  • 回源超时

✅ 排查:

  • 绕过 CDN,直连源站
  • 查看 CDN 回源日志

八、快速排查清单(实战版)

✅ 5 分钟定位法:

  1. error.log
  2. curl 上游服务
  3. 看服务是否存活
  4. 看端口是否监听
  5. 看是否超时

九、常见 502 原因速查表

原因 特征
服务没启动 connection refused
服务崩了 connection reset
超时 upstream timed out
容器没 ready no live upstreams
端口配错 connect failed
防火墙 timeout / reset

十、如果你愿意,我可以进一步帮你

你可以直接贴:

  • ✅ Nginx error.log 报错
  • ✅ 架构(Nginx / CDN / K8s)
  • ✅ 502 出现频率(持续 / 偶发)

我可以 直接帮你定位到具体配置或代码问题

0