[英]NGINX Bad Gateway 502 on Any Port Except 3000 with NodeJS/Express
[英]502 Bad Gateway when connecting to Nodejs app running express through Nginx
我在連接到在端口 8081 上運行的節點應用程序時遇到問題。
我的設置如下(一切都在樹莓派上運行):
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 位置重寫,因為 '/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;
}
}
}
問題似乎與您暴露 nodejs 應用程序的網絡接口有關。 您已將應用程序設置為在具有 ip 192.168.0.178
的接口上偵聽端口8081
,但根據說明,nginx 正在通過環回接口進行代理
proxy_pass http://localhost:8081;
您可以解決此問題,將 nodejs 應用程序暴露在環回接口上:
var server = app.listen(8081, 'localhost');
除了應用程序正在運行的機器之外,節點應用程序不應再從任何其他機器的端口 8081 上直接訪問
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.