You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Nginx连接树莓派上的Node.js应用时出现502 Bad Gateway错误

Nginx代理/pub路径到Node.js应用返回502 Bad Gateway的解决办法

我之前遇到过完全类似的情况,结合你的配置和测试错误信息,问题其实出在两个关键点上:

问题根源分析

  • 监听地址不匹配:你的Node.js应用明确绑定了192.168.0.178这个局域网IP,但Nginx的proxy_pass却指向了localhost(也就是127.0.0.1回环地址)——Node.js根本没在这个地址上监听请求,所以Nginx找不到后端服务,直接返回502。
  • 请求路径不匹配:就算解决了监听地址的问题,当你访问/pub时,Nginx会把完整的/pub路径转发给Node.js,但你的Node.js代码里只有处理/路径的路由,没有对应/pub的逻辑,请求还是会失败。

最终修复后的配置

我调整后的Nginx配置同时解决了这两个问题,还加上了日志方便后续排查:

events {
    worker_connections 1024;
}
http {
    access_log /data/access_log.log;
    error_log /data/error_log.log debug;
    upstream backend {
        server 192.168.0.178:8081; # 和Node.js监听的IP保持一致,避免地址不匹配
    }
    server {
        root /data/web;
        location / { }
        location /pub {
            rewrite /pub(.*) /$1 break; # 移除请求路径里的/pub前缀,让Node.js能匹配到/路由
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}

另外,也可以简化Node.js的监听配置,让它监听所有可用的网络接口(包括回环地址和局域网IP),这样就不用纠结Nginx用哪个IP转发了:

app.get('/', function(req, res){
    res.send("Hello World!");
});
var server = app.listen(8081, '0.0.0.0'); // 监听所有接口

这样修改后,再用wget http://192.168.0.178/pub测试,就能正常返回"Hello World!"了。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:29:45