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 を取得します。

アップストリーム構成を 1 つのインスタンス (たとえば 8124) だけを指すように変更しても、502 は引き続き発生します。

netstat を実行すると、試したポートのいずれかでリッスンしている他のアプリケーションが 0 個表示されます。

NGINX が不良ゲートウェイを報告するのはなぜですか? インスタンスの 1 つがダウンしている場合、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 に答える