【问题标题】:Nginx not listening to portsNginx 不监听端口
【发布时间】:2023-12-24 01:47:02
【问题描述】:

我正在尝试将 Nginx 设置为反向代理,以访问在同一服务器上运行的多个 NodeJS 应用程序。

我的 nodeJS 应用程序在 PM2 上运行,一切看起来都很好:

我的 nodeJS 应用是使用 express-generator 生成的简单 nodeJS 应用,所以它应该在 3000 端口上运行。

我还使用以下配置设置了我的 Nginx

server {
    listen 1004;

    server_name pumadashboard.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

但是,当我 curl 127.0.0.1:1004 时,我从 Nginx 收到 badGateway 错误。我也无法从本地网络上的任何地方访问 pumadashboard.com,它只会加载直到超时。

【问题讨论】:

  • 标题具有误导性。如果你从 nginx 收到错误,它肯定会监听端口。检查nginx的error.log

标签: node.js curl nginx


【解决方案1】:

尝试添加

proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port 80;

到您的location /

【讨论】:

    【解决方案2】:

    如果你这样做,你会得到什么:

    curl http://locahost:3000
    

    这应该会返回一个响应,并且您将了解应用程序是否正常启动。

    这个 nginx 配置对我有用

    upstream pumadashboard.com {
      server 127.0.0.1:3010;
    }
    
    server {
        listen 80;
        server_name pumadashboard.com;
        root <path to your node application>;
    
        access_log /var/log/nginx/your-access.access.log;
        error_log /var/log/nginx/your-error.error.log;
    
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
    
        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_max_temp_file_size 0;
            proxy_pass http://pumadashboard.com/;
            proxy_redirect off;
            proxy_read_timeout 240s;
        }
    }
    

    【讨论】:

    • 不起作用,所发生的只是如果我现在使用浏览器中的 IP 地址访问我的网络服务器而不指定端口,就像 192.168.0.100 一样,它会进入应用程序,但是 URL 会不工作。
    • 第一步有效。您可以使用 ip 查看您的应用程序,而无需指定端口这一事实意味着 nginx 将流量转发到您的应用程序。关于域是另一个问题,您的提供商可能存在一些错误。你使用 aws route53 吗?