0

我在几个 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 执行失败?

4

1 回答 1

0

如果 netstat 显示你的 nodejs 应用程序没有在端口上运行,那么问题是你还没有启动你的 nodejs 应用程序。

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

于 2016-08-16T17:29:18.930 回答