我有一个简单的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/

10-16 14:54
查看更多