2

WebSocketを実装するバックエンドCherryPyサーバーのApacheリダイレクトルールを適切に設定する方法を理解しようとしています(ws4pyモジュールを介して実行)。問題は、書き換えエンジンまたはプロキシパスを使用すると、リダイレクトされたリクエストのアップグレードヘッダーが削除されるため、CherryPyサーバーがそれについて苦情を申し立て、ハンドシェイクステップで失敗することです。

私が持っているシナリオは次のとおりです。WebSocketをセットアップするws4pyモジュールを備えたCherryPyサーバーがあります。localhost:9000で実行されます。着信リクエストをバックエンドサーバーにリダイレクトするだけのapacheフロントエンドが必要です(それ以上のことを行いますが、簡単にするために、まさにそれを行う必要があります)。

私が持っているアパッチルールは単純です

RewriteRule ^(/websocket(/.*)?)$ http://some_host:9000$1 [P,L]

したがって、/ websocketで始まるすべてのリクエストは、ポート9000で実行されているバックエンドサーバーにリダイレクトされます。Pフラグはプロキシを表し、Lは書き換えプロセスを停止します(http://borkweb.com/story/apache-rewrite-cheatsheetを参照)。 )。

クライアントがHTTPヘッダーUpgrade:websocketを使用してリクエストを送信すると、apacheエンジン(書き換えモジュール)がそれを取り除き、WebSocketハンドシェイクが失敗します。

アップグレードヘッダーの存在を許可するように書き換えルールを修正する方法はありますか?

4

1 に答える 1

2

残念ながら、Apache にはプロキシ WebSocket 接続をリバースする機能がまだありません (絶対にすべきです!)。しかし、Web リクエストを Apache を使用して処理し、WebSocket 接続を別のもので処理できるようにするソリューションがあります。このソリューションでは、Apache と WebSocket サーバーの両方のフロント エンドとして HAProxy を使用します。

以下に、開始するための関連リンクをいくつか示します。

于 2012-08-24T16:31:15.863 に答える