Node.js后端对接NGINX反向代理求助:DigitalOcean部署后502错误
Troubleshooting 502 Bad Gateway: Node.js + NGINX on DigitalOcean
太懂这种差临门一脚的憋屈了!502 Bad Gateway本质就是NGINX没法和你的Node.js后端建立连接,咱们一步步拆解排查:
1. 先确认Node服务真的在跑,且监听对了地址
- 登录服务器后,先查Node进程:
ps aux | grep node,要是没看到你的应用进程,先启动它(推荐用PM2这类进程管理器,避免终端关闭就挂掉:pm2 start your-app.js)。 - 再检查监听的IP和端口:
ss -tulpn | grep node,重点看输出里的LISTEN行,比如0.0.0.0:3000或者127.0.0.1:3000都没问题,但如果是服务器的内网IP或者某个特定IP,得确保NGINX能访问到这个地址。 - 在服务器本地测试Node服务:
curl http://localhost:你的端口,要是这一步都拿不到正常响应,那问题肯定在Node服务本身,和NGINX无关——先把本地访问搞定再说。
2. 核对NGINX反向代理配置的细节
先把你提到的nginx.conf相关配置贴出来会更精准,但先给你几个必查点:
proxy_pass的地址必须和Node监听的完全匹配:比如Node监听127.0.0.1:3000,那配置里就得写proxy_pass http://localhost:3000;,端口号千万别写错!- 别忘了加必要的代理头,不然有些Node应用会因为缺少头信息拒绝响应:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
- 修改配置后一定要重启NGINX:
sudo systemctl restart nginx,光用sudo nginx -t测试配置通过没用,得让新配置生效。
3. 检查服务器防火墙(UFW)规则
DigitalOcean默认开了UFW,别让它挡住连接:
- 如果你让Node监听
127.0.0.1(只允许本地访问),那不用开Node端口给外部;但要是监听的是公网IP,得确保端口开放:sudo ufw allow 3000/tcp。 - 重点确认80/443端口是开放的,让外部能访问NGINX:
sudo ufw status,看看输出里有没有80/tcp (ALLOW)和443/tcp (ALLOW)。
4. 扒日志找具体报错线索
日志是排查问题的黄金线索:
- NGINX错误日志:
sudo tail -f /var/log/nginx/error.log,然后在浏览器访问你的域名触发502,看看日志里的具体错误——比如connect() failed (111: Connection refused) while connecting to upstream,直接说明NGINX连不上Node的端口。 - Node服务日志:如果用PM2,直接
pm2 logs;如果是直接启动的,看终端输出或者你配置的日志文件,有没有启动失败、端口被占用之类的报错。
5. 权限问题别忽略
- 确保运行Node的用户有足够权限访问应用文件,比如读取代码、写入日志的权限,别因为权限不足导致服务启动失败。
- NGINX的运行用户(通常是www-data)虽然不用直接访问Node文件,但如果你的应用有静态文件通过NGINX托管,得确保这些文件的权限正确。
要是这些步骤都排查完还是没解决,把你的nginx.conf相关配置块和Node测试应用的代码贴出来,咱们再精准定位!
内容的提问来源于stack exchange,提问作者DR01D
相关产品推荐
相关产品推荐

