502连接到通过Nginx运行Express的Nodejs应用程序时出现错误网关

时间:2018-01-14 14:57:00

标签: node.js nginx

我在连接到在端口8081上运行的节点应用时出现问题 我的设置如下(一切都在Raspberry Pi上运行):

NGINX

events {
  worker_connections  1024;
}

http {
server {
  root /data/web;

  location / {
  }

  location /pub {
    proxy_pass http://localhost:8081;
    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;
  }
}
}

我正在使用第一个位置提供静态文件(这似乎工作正常),我希望第二个位置重新路由到我的节点应用程序。它在端口8081上运行。

我的节点应用程序如下所示:

app.get('/', function(req, res){
  res.send("Hello World!");
});
var server = app.listen(8081, '192.168.0.178');

我正在使用局域网中另一台电脑的简单wget测试我的连接:

wget http://192.168.0.178/pub

我得到的完整错误是:

http://192.168.0.178/pub
Connecting to 192.168.0.178:80... connected.
HTTP request sent, awaiting response... 502 Bad Gateway
2018-01-14 15:42:27 ERROR 502: Bad Gateway.


接受的答案确实是我遇到的问题 我添加的另一件事是在我的/酒吧位置重写,因为' / pub'需要从进入Node应用程序的URL切断。所以最终的nginx conf看起来像这样:

http {
access_log /data/access_log.log;
error_log /data/error_log.log debug;

upstream backend {
  server localhost:8081;
}

server {
  root /data/web;

  location / {
  }

  location /pub {
    proxy_pass http://localhost:8081;
    rewrite /pub(.*) /$1; break;
  }
}
}

1 个答案:

答案 0 :(得分:1)

问题似乎与您公开nodejs应用程序的网络接口有关。您已将应用程序设置为使用ip 8081在接口上侦听端口192.168.0.178,但是nginx通过回送接口进行代理,并给出了指令

proxy_pass http://localhost:8081;

您可以在loopback接口上解决暴露nodejs应用程序的问题:

var server = app.listen(8081, 'localhost');

除应用程序正在运行的计算机外,任何其他计算机上的节点应用程序不应再直接在端口8081上访问