502 Bad Gateway 错误完全指南:从原理到排查解决
深夜网站突然报错 502,手忙脚乱找不到原因?这篇帮你彻底搞懂它。
什么是 502 Bad Gateway?
502 Bad Gateway 是 HTTP 协议中的一个状态码,表示网关或代理服务器收到了无效响应。
简单来说,就是:
你访问网站时,请求经过了一个"中间人"(网关/代理),但这个中间人去请求后端服务器时,后端返回了它无法理解或处理的东西。
典型场景
1 | 用户 → Nginx(网关) → 后端服务(API/应用服务器) |
502 的常见原因
1. 后端服务宕机
- 应用服务器未启动
- 进程崩溃退出
- 端口未监听
2. 网关与服务通信失败
- 后端响应超时
- 网络断开
- 防火墙拦截
3. 后端返回格式错误
- 后端返回了无效的 HTTP 响应
- 响应头或响应体格式异常
4. 资源耗尽
- 后端服务内存/CPU 耗尽
- 连接数达到上限
5. 配置错误
- Nginx 配置的 proxy_pass 指向错误地址
- 负载均衡配置不当
如何排查 502 错误?
步骤 1:检查后端服务状态
1 | # 查看服务进程是否运行 |
步骤 2:查看后端日志
1 | # 应用日志 |
步骤 3:检查 Nginx 错误日志
1 | tail -f /var/log/nginx/error.log |
Nginx 的日志通常会明确指出是连接失败还是超时。
步骤 4:测试后端服务直接访问
1 | # 绕过 Nginx,直接访问后端 |
如果这里也失败,说明问题在后端本身。
步骤 5:检查网络连通性
1 | # 测试端口连通性 |
如何解决 502 错误?
| 原因 | 解决方案 |
|---|---|
| 服务未启动 | 启动服务:systemctl start your-app |
| 进程崩溃 | 查看日志修复代码后重启 |
| 超时 | 调高 proxy_connect_timeout / proxy_read_timeout |
| 资源不足 | 增加资源或优化代码 |
| 配置错误 | 检查 Nginx proxy_pass 配置 |
Nginx 超时配置参考
1 | location / { |
如何预防 502?
-
健康检查 + 自动重启
- 使用 systemd 或 Docker 健康检查
- 异常自动拉起
-
负载均衡
- 多实例部署,Nginx upstream 轮询
-
监控告警
- 接入 Prometheus + Grafana
- 502 出现立即告警
-
优雅关闭
- Nginx proxy_next_upstream 尝试其他后端
- 后端服务优雅退出的配置
总结
502 本质上是 “网关后面的服务挂了” 的信号。排查思路:
- 先看后端服务是否活着
- 再看日志定位具体原因
- 最后针对性修复
希望这篇能帮你在遇到 502 时不再慌张!
有问题欢迎评论区交流~