任何端口上的NGINX Bad Gateway 502除了具有NodeJS / Express的3000之外

时间:2013-08-12 19:53:52

标签: node.js nginx express

我在一些NodeJS实例前面有一个NGINX实例(1.4稳定)。我试图使用上游模块来加载NGINX的平衡,如下所示:

upstream my_web_upstream {
          server localhost:3000;
          server localhost:8124;
          keepalive 64;
        }



location / {
      proxy_redirect off;
      proxy_set_header   X-Real-IP            $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host                   $http_host;
      proxy_set_header   X-NginX-Proxy    true;
      proxy_set_header   Connection "";
      proxy_http_version 1.1;
      proxy_cache one;
      proxy_cache_key sfs$request_uri$scheme;
      proxy_pass         http://my_web_upstream;
        }

当端口3000上的实例不可用时,会出现此问题。我从NGINX获得了502 Bad Gateway。

如果我将上游配置更改为仅指向一个实例,例如8124,则仍然会发生502。

运行netstat显示0个其他应用程序在我试过的任何端口上进行侦听。

为什么NGINX会报告错误的网关?如果其中一个实例出现问题,我怎样才能让NGINX进行实施?

1 个答案:

答案 0 :(得分:0)

如果netstat显示您的nodejs应用程序未在端口上运行,则问题是您尚未启动nodejs应用程序。

这个nginx配置知道如何代理nodejs应用程序,但是如果nodejs应用程序尚未启动,你可以保证获得502。如果要在多个端口上运行它,则必须在每个端口上启动应用程序。因此,不要将端口3000硬编码到NodeJS代码中,而是使其从环境变量获取端口,或者使用像pm2(https://github.com/Unitech/pm2)这样的流程管理器生成多个实例。一旦这些运行,nginx就可以代理它们。