Nginx 负载均衡报错 502 Bad Gateway 怎么排查后端连接

文章导读
Nginx 出现 502 Bad Gateway 通常意味着反向代理无法从上游服务器获取有效响应,排查时应优先确认后端服务存活状态及网络连通性。
📋 目录
  1. 负载均衡 upstream 配置示例
  2. 502 错误核心排查步骤
  3. 常见坑与注意事项
  4. 参考来源
A A

Nginx 出现 502 Bad Gateway 通常意味着反向代理无法从上游服务器获取有效响应,排查时应优先确认后端服务存活状态及网络连通性。

先说结论:502 错误本质是 Nginx 作为反向代理无法从后端获取有效响应,优先排查后端进程是否存活及网络是否可达。

  • 先确认:后端服务进程是否运行且监听正确端口
  • 先处理:查看 Nginx 错误日志定位具体连接失败原因
  • 再验证:修复后通过 curl 或浏览器确认状态码回归 200

负载均衡 upstream 配置示例

标题强调负载均衡,若配置了多节点 upstream,需检查 upstream 块配置是否正确。以下是一个典型的多后端配置示例,包含被动健康检查参数:

Nginx 负载均衡报错 502 Bad Gateway 怎么排查后端连接
upstream backend_pool {
    # 被动健康检查:3 次失败后标记不可用,30 秒后尝试恢复
    server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend_pool;
        # 连接超时设置
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
    }
}

注意:开源版 Nginx 默认仅支持被动健康检查(请求失败才标记),主动健康检查通常需要第三方模块或 Nginx Plus。

502 错误核心排查步骤

按照以下顺序逐步排查,每完成一步都观察日志变化,常用命令已整合至步骤中:

1. 查看 Nginx 错误日志
这是最关键的一步。打开 /var/log/nginx/error.log,查找最近的 502 记录。常见报错信息包括 connect() failed(连接被拒绝)或 upstream timed out(响应超时)。

Nginx 负载均衡报错 502 Bad Gateway 怎么排查后端连接
tail -f /var/log/nginx/error.log

2. 确认后端服务状态
登录到后端服务器或本机,检查应用进程是否在运行。如果进程挂掉,Nginx 自然无法连接。

# 检查后端服务进程状态(以 PHP-FPM 或 Java 为例)
systemctl status php-fpm
# 检查后端端口监听情况
ss -tnp | grep 8080

3. 测试网络连通性
在 Nginx 所在的服务器上,测试能否打通后端 IP 和端口。如果这里不通,检查防火墙或安全组规则。

Nginx 负载均衡报错 502 Bad Gateway 怎么排查后端连接
# 从 Nginx 服务器内部测试后端连通性
curl -v http://127.0.0.1:8080
# 或检查 Nginx 配置语法
nginx -t

4. 验证修复结果
完成修复后,使用 curl -I http://你的域名 查看返回的 HTTP 状态码,确认是否为 200 OK。同时观察 Nginx 访问日志(access.log),确认状态码字段不再是 502。

常见坑与注意事项

1. 后端只监听了 127.0.0.1:如果 Nginx 配置的上游地址是局域网 IP,而后端只绑定本地回环地址,会导致连接被拒绝。
2. SELinux 拦截:在开启 SELinux 的 CentOS/RHEL 系统中,SELinux 策略可能禁止 Nginx 发起网络连接。如果日志提示 Permission denied,可尝试临时设置 setsebool -P httpd_can_network_connect 1 测试。
3. 超时时间过短:默认超时时间对于某些复杂查询可能不够,但不要无限制调大,否则会导致请求堆积。
4. 防火墙规则变更:有时后端服务重启后防火墙规则未持久化,或云服务商安全组规则被意外修改。

参考来源