/ / nginx 1.2.0-socket.io-HTTP / 1.1-プロキシwebsocket接続-プロキシ、nginx、websocket、socket.io、reverse-proxy

nginx 1.2.0 - socket.io - HTTP / 1.1 - プロキシwebsocket接続 - プロキシ、nginx、websocket、socket.io、リバースプロキシ

node-http-proxyモジュールを交換したいnginx proxy_passモジュールを使用します。私が読んだように、新しくリリースされたnginxバージョンでは、そのままHTTP / 1.1をサポートすることは可能ですか? Websocketはnginxでサポートされていないという問題に苦しんでいるスレッドを見ました。

私の場合、複数のノードプロジェクトを実行していますバックグラウンドで、ドメインに応じてポート80から8000-8100にWebSocket接続をルーティングしたい。 tcp_moduleアドオンを使用せずにwebsocketプロキシ/リバースプロキシを実行するネイティブな方法はありますか?

proxy_passingを使用してnginx.confのアップストリームをセットアップしようとしましたが、websocketを介してポート80に接続しようとすると、502ゲートウェイエラーが発生します。

同じ問題に直面している人はいますか? 誰もがポート80を介してプロキシするnginx + spcket.ioの実用的な例を持っていますか?

回答:

回答№1の場合は35

いいえ、これはまだ不可能です。 nginx 1。2は、実際にはHTTP / 1.1リバースプロキシを含む1.1.x開発ブランチからのものを取り入れています。 Websocket接続はHTTP / 1.1 "Upgrade"ヘッダーを使用して確立されますが、nginxがこの種類のヘッダーをサポートするという事実は、websocketをサポートするという意味ではありません(websocketはHTTPではなく異なるプロトコルです)。 (私は1.1.xブランチを使用して自分でこれを試しました(これは目的に十分安定していることがわかりました)、tcp_moduleなしでは機能しません)

Websocketはおそらく1.3.x( http://trac.nginx.org/nginx/roadmap )。

あなたの選択肢は:

  • node-http-proxyを使い続ける
  • tcpモジュールなしでnginxを使用します。 socket.ioは「Webソケットは使用しませんが、他の何か(例えば、長いポーリング)は使用しません」
  • tcpモジュールを使用したnginx:この場合、このモジュール用に追加のポートが必要だと思います(自分でこれを試したことはありません)
  • リバースプロキシとして他の何かを前面に配置します。 nginxとノードの前で、WebProxyをサポートするHAProxyを使用します。 Nginxは、プロキシではなく、静的ファイルサーバーとして機能するようになりました。追加のキャッシュが必要な場合は、ワニスも別のオプションです。

回答№2の場合は0

TCPモジュールを使用したNginXに関して、私が遭遇した問題はほとんどありません。 ただし、最も注意が必要なのは、EC2インスタンスのポート80でnginxを使用してWebソケットを実行しようとすることです。

全体の構成を説明しました ここに