You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修复Nginx 502 Bad Gateway错误?上游连接被拒问题求助

解决Nginx 502 Bad Gateway错误:连接上游服务被拒绝

兄弟,先看你的错误日志里的核心信息:

2018/03/26 10:13:12 [error] 9456#9456: *2580202 connect() failed (111: Connection refused) while connecting to upstream, client: 180.97.106.39, server: _, request: "GET /?season=1&league_id=1'%20AND%20(SELECT%20*%20FROM%20(SELECT(SLEEP(5)))oU...

这里的connect() failed (111: Connection refused)是关键——Nginx作为反向代理,没法把请求转发到你的后端业务服务(比如Node、PHP-FPM、Python服务这些),所以返回了502。下面是最常见的排查和修复步骤:

1. 先确认后端服务还活着吗?

Nginx本身不处理业务,全靠后端服务干活。先检查你的后端进程是不是挂了:

  • 如果用systemd管理服务(比如Node、Django服务),直接跑systemctl status 你的服务名(比如systemctl status nodejs),看状态是不是active (running)
  • 也可以用ps aux | grep 你的服务进程名(比如ps aux | grep node),看看进程列表里有没有它
  • 如果服务没运行,赶紧启动:systemctl start 你的服务名,顺便设置开机自启避免下次再挂:systemctl enable 你的服务名

2. 核对后端服务的监听地址和端口

Nginx配置里的proxy_pass或者upstream块指定了后端的地址和端口,比如你可能配置了proxy_pass http://localhost:3000;。这时候要确认:

  • 后端服务确实在监听这个端口:跑netstat -tulpn | grep LISTEN,找对应的端口(比如3000)是不是在监听列表里
  • 监听地址要对:如果后端只监听127.0.0.1,那只有本地能访问;如果Nginx和后端不在同一台机器,要确保后端监听的是可被Nginx访问的IP(比如0.0.0.0或者对应内网IP)
  • 如果端口或者地址不对,要么改Nginx配置,要么改后端服务的监听设置,改完重启Nginx:sudo systemctl restart nginx

3. 检查防火墙有没有拦着

有时候本地防火墙会搞事情,即使是同一台机器上的Nginx和后端服务,也可能被防火墙拦截通信:

  • sudo ufw status(UFW防火墙)或者sudo firewall-cmd --list-all(Firewalld)查看当前规则
  • 如果发现后端端口没被允许,添加规则:比如sudo ufw allow 3000/tcp(假设后端用3000端口)
  • 重启防火墙生效:sudo ufw reload或者sudo firewall-cmd --reload

额外提一句:日志里的恶意请求

你日志里的请求带了AND (SELECT * FROM (SELECT(SLEEP(5)))oU...,这明显是自动化的SQL注入扫描。虽然这不是这次502的原因,但后续得注意防护:

  • 后端服务一定要做输入验证和参数过滤,别给SQL注入留机会
  • 可以在Nginx里加简单的WAF规则,或者用fail2ban拦截这类恶意IP的请求

先从上面前三点排查,90%的这类502问题都是后端服务挂了或者端口/地址不对导致的。

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

火山引擎 最新活动