我有一个简单的nginx配置文件
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ec2-x-x-x-x.compute-1.amazonaws.com;
#root /home/ec2-user/dashboard;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:4000;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
但当我发送请求时,它说它无法访问服务器。
不过,服务器在端口4000上运行良好,
sudo netstat -tulpn
给了我这个Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6512/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1640/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1247/master
tcp6 0 0 :::80 :::* LISTEN 6512/nginx: master
tcp6 0 0 :::22 :::* LISTEN 1640/sshd
tcp6 0 0 :::3000 :::* LISTEN 15985/node
tcp6 0 0 ::1:25 :::* LISTEN 1247/master
tcp6 0 0 :::4000 :::* LISTEN 3488/node
udp 0 0 0.0.0.0:68 0.0.0.0:* 484/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 451/chronyd
udp 0 0 0.0.0.0:1510 0.0.0.0:* 484/dhclient
udp6 0 0 ::1:323 :::* 451/chronyd
udp6 0 0 :::1458 :::* 484/dhclient
另外,当我使用
node
作为代理服务器时var http = require('http'),
httpProxy = require('http-proxy');
httpProxy.createProxyServer({target:'http://localhost:4000'}).listen(80);
这很管用。
你知道我做错了什么吗?
最佳答案
感谢有用的netstat
输出。问题似乎是Node.js应用程序只监听IPv6,如输出中的:::*
所示。
Nginx正在尝试通过IPv4连接它,而IPv4并没有监听。
您的Node.js代理可能可以工作,因为它在两端共享同一个问题。:)
您没有共享正在使用的Node.js版本。Some versions had an issue where attempting to set up an IPv4 connection would result in an IPv6 connection。要么你遇到了这样的bug,要么你的Node.js应用程序实际上被错误配置为在IPv6上侦听。
如果端口400上的Node.js应用程序被正确配置为侦听IPv4,您将在netstat
输出中看到此类条目:
tcp 0 0 127.0.0.1:4000 0.0.0.0:* LISTEN 12345/node
关于linux - 为什么Node.js充当后端Node.js应用程序的代理,而不是Nginx?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34904572/