25

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の実際の例を持っている人はいますか?

4

2 に答える 2

36

いいえ、これはまだ可能ではありません。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はWebSocketを使用しませんが、他の何か(長いポーリングなど)を使用します
  • nginxとtcpモジュール:この場合、このモジュール用に追加のポートが必要だと思います(これを自分で試したことはありません)
  • リバースプロキシとして他のものを前面に配置します。nginxとノードの前にHAProxy(WebSocketをサポート)を使用します。Nginxは、プロキシではなく、単に静的ファイルサーバーとして機能するようになりました。追加のキャッシュが必要な場合は、ワニスも別のオプションです。
于 2012-05-08T12:53:53.310 に答える
0

NginX と TCP モジュールに関して、私が遭遇した問題はほとんどありません。しかし、最も難しいのは、EC2 インスタンスのポート 80 で nginx を使用して websocket を実行しようとすることです。

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

于 2012-12-19T05:34:54.763 に答える