You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Nginx负载均衡器出现502 Bad Gateway故障排查求助

解决Nginx负载均衡502 Bad Gateway问题

看起来你遇到的502错误核心是Nginx无法成功与后端的SpringBoot服务建立连接——虽然你能单独访问每个应用,但Nginx自身的运行环境或配置细节可能存在阻碍。下面是一步步的排查和解决建议:

1. 先通过Nginx错误日志定位具体原因

你配置里的error_log路径应该是/var/log/nginx/error.log,先查看日志里的详细错误信息:

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

常见的错误提示会直接点明问题:

  • 如果是permission denied:大概率是SELinux限制了Nginx的网络访问
  • 如果是connection refused:检查后端服务的地址/端口是否配置正确,或者服务是否真的在运行(虽然你说单独访问没问题,但还是快速确认下)

2. 排查SELinux(CentOS7最容易踩的坑)

CentOS7默认SELinux是enforcing状态,哪怕你关闭了防火墙,它也会阻止Nginx发起对外的网络连接。先临时关闭SELinux测试:

setenforce 0

然后重新访问负载均衡地址,如果502消失了,说明就是SELinux的问题。要永久解决的话,编辑/etc/selinux/config文件,把SELINUX=enforcing改成SELINUX=permissive,然后重启系统。

或者更安全的做法是给Nginx添加网络连接的SELinux权限(不需要完全关闭SELinux):

setsebool -P httpd_can_network_connect 1

3. 检查负载均衡配置的正确性

确保你的upstream块和proxy_pass配置没有错误,参考示例配置:

# 定义后端SpringBoot服务集群
upstream springboot_backend {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    # 可选:添加负载均衡策略,比如轮询(默认)、ip_hash等
    # ip_hash;
}

server {
    listen 80; # 负载均衡监听的端口

    location / {
        proxy_pass http://springboot_backend;
        # 必须添加的代理头,否则后端服务可能无法正确处理请求
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

注意:

  • 尽量用127.0.0.1代替localhost,避免偶尔出现的DNS解析或配置问题
  • 确保proxy_pass后面的名称和upstream块的名称完全一致(比如上面的springboot_backend

4. 验证Nginx运行用户的访问权限

你的配置里用了user nginx;,确认这个用户是否能正常访问后端服务:

su - nginx -s /bin/bash
curl http://127.0.0.1:8081

如果curl能正常返回,说明nginx用户可以访问后端服务;如果不行,检查用户的shell权限(nginx用户默认是/sbin/nologin,需要临时切换shell测试)。

最后,修改配置后记得重启Nginx生效:

systemctl restart nginx

内容的提问来源于stack exchange,提问作者Mack

火山引擎 最新活动