nginx: node.js varnish と stunnel の使用中に 502 不正なゲートウェイが発生する

nginx: node.js varnish と stunnel の使用中に 502 不正なゲートウェイが発生する

私はフォローしていますこのチュートリアル、そして nginx の設定を除いてすべて正常に動作しているようです。node.jsアプリケーションはポート 1337 で実行され、varnish はポート 80 で、stunnel は 443 で、nginx は 8080 で実行されます。

ポートを指定するとアプリに正しくアクセスできますhttps://example.com:1337が、アクセスするとエラーが表示されhttps://example.comます502 Bad Gateway

これは私の nginx ログの出力です:

2012/08/25 14:13:59 [error] 6049#0: *1 no live upstreams while connecting to upstream, client: 127.0.0.1, server: example.com, request: "GET / HTTP/1.1", upstream: "http://app_example/", host: "example.com"
2012/08/25 14:14:02 [error] 6049#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:1337/", host: "example.com"

これはそのドメインの nginx 設定ファイルです:

upstream example.com {
    server 127.0.0.1:1337;
}

server {
    server_name  example.com;
    listen 8080;
    location / {
            proxy_pass      http://example.com;
            proxy_redirect  off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

実行中:

  • ウブントゥ 12.04
  • nginx/1.1.19
  • スタンネル 4.42
  • ワニス 3.0.2

答え1

まず、そのリンクには、Web サイトの静的ファイルと HTML ファイルにのみ nginx を使用していると書かれています。nginx 経由で nodejs/websockets をプロキシしようとしています。

では、なぜその Web サイトではそうしないように言われているのでしょうか? 主な理由は、安定したリリースの nginx では Websocket がサポートされていないためです。

Websocketsは1.1仕様で、nginxは1.0仕様です。そうは言っても、nginxのtcp_proxyのようにコンパイルすることはできますが、そのURLで指摘されているようにvarnishでプロキシするだけです。

ヴァーニッシュ->nginx->ノード

ただやる

ワニス -> ノード

関連情報