http と同じコンテキストで Websocket への Apache リバース プロキシ

http と同じコンテキストで Websocket への Apache リバース プロキシ

いくつかのアプリケーションのリバース プロキシとして動作する Apache/2.4.6 インストールがあります。今度は別のものを構成する必要があります。HTTP プロキシは正常に動作していますが、Web ページの一部のセクションでは、クライアントが Websocket 接続を開始しようとします。

問題は、URL が部分的に共有されていることです。

HTTP リクエスト:http://domain/context/[whatever]

WSリクエスト:ws://domain/context/specific-text?param1&param2

ProxyPass が内部に入ることができないため、使用できませんIf(プロトコルを確認中) <If>

試した設定:

<Location /context/specific-text>
    ProxyPass ws://internal.domain/context/specific-text

前に

<Location /context/>
    ProxyPass http://internal.domain/context/

しかし、動作しません。末尾のスラッシュ (存在しない) が原因と思われます。

詳細情報:

  • ソケットは「200」コードを好まないと文句を言っています。Apache は ws 接続を返していませんが、ある時点でプロキシが行われています。
  • 試してみた<Location>
  • specific-text書き直すことも考えましたspecific-text/が、管理していないものを操作するのは好きではありません。アプリケーションは有料製品なので、何か害があるかどうかは尋ねられません。まあ、尋ねることはできますが、回答は期待できません。

答え1

私の場合、次の ProxyPass 設定スニペットが有効です:

ProxyPass        /specific wss://0.0.0.0:4000/specific
ProxyPassReverse /specific wss://0.0.0.0:4000/specific

ProxyPass        / https://0.0.0.0:4000/
ProxyPassReverse / https://0.0.0.0:4000/

文書にはこう記されている:

ProxyPass ディレクティブの順序付け

設定された ProxyPass および ProxyPassMatch ルールは、設定順にチェックされます。最初に一致したルールが優先されます。

関連情報