この記事では、WebSocketのプロキシのためのApacheのmod_proxy_wstunnelの構成について詳しく説明しています。 ProxyPass/ProxyPassReverseを使用したモジュールの有効化、仮想ホスト構成、トラブルシューティング(ログ、ネットワーク、構成)、WS/WSSプロトコルの取り扱い、およびSECをカバーする
mod_proxy_wstunnel
でプロキシのWebsocketのApacheの構成には、いくつかのステップが含まれます。まず、必要なモジュールを有効にしていることを確認してください。これには通常、Apache構成ファイル(通常は/etc/apache2/mods-available/proxy_wstunnel.load
または同様のパスにあるapache構成ファイルのmod_proxy_wstunnel
ラインを除外しません。解決後、 a2enmod proxy_wstunnel
を使用してモジュールを有効にしてから、Apache(debian/ubuntu Systemsでsudo systemctl restart apache2
)を再起動する必要があります。
次に、Apache構成ファイル内で仮想ホストまたはプロキシセクションを構成する必要があります。この構成は、Apacheが着信WebSocket接続を処理し、バックエンドWebSocketサーバーに転送する方法を定義します。これが構成スニペットの例です。
<code class="apache"><virtualhost> ServerName example.com ProxyPreserveHost On <proxy> Order deny,allow Allow from all </proxy> ProxyPass /ws wss://backend.example.com:8080/ws ProxyPassReverse /ws wss://backend.example.com:8080/ws RequestHeader set Upgrade websocket RequestHeader set Connection Upgrade </virtualhost></code>
この構成は、すべての要求をwss://backend.example.com:8080/ws
のバックエンドWebsocketサーバーに/ws
に向けます。 ProxyPreserveHost On
、クライアントの元のホストヘッダーが保持されることを保証します。 ProxyPass
およびProxyPassReverse
は、適切なWebSocketプロキシに不可欠です。 RequestHeader
ディレクティブは、WebSocketの握手に必要なヘッダーを設定します。 example.com
とbackend.example.com:8080
実際のドメイン名とポート番号に置き換えることを忘れないでください。これらの変更を行った後、Apacheを再起動して新しい構成を適用します。
mod_proxy_wstunnel
の問題の問題の問題のトラブルシューティングのトラブルシューティングには、多くの場合、いくつかの重要な領域をチェックすることが含まれます。
/var/log/apache2/error.log
または同様のパスにある)には、Websocketのプロキシ中に遭遇したエラーに関する貴重な情報が含まれています。接続の障害、握手エラー、またはその他の問題に関する手がかりについては、このログを調べてください。ping
やtelnet
(またはnc
)などのツールを使用して、ネットワークの接続とポートアクセシビリティを確認します。 Apacheサーバーとバックエンドサーバーの両方でファイアウォールをチェックして、Websocketトラフィックをブロックしていないことを確認します(それぞれWSとWSSのポート80および443)。ProxyPass
およびProxyPassReverse
指示に細心の注意を払って、パスとURLが正確であることを確認してください。誤って構成されたヘッダーも問題を引き起こす可能性があります。mod_proxy_wstunnel
が適切に読み込まれ、Apache構成で有効になっていることを再確認します。 apachectl -M
コマンド(または同等)を使用して、モジュールがリストされていることを確認します。はい、 mod_proxy_wstunnel
、WS(ポート80でWebSocket)とWSS(SSL/TLSで保護されたポート443を介してWebSocket)の両方でWebSocket接続を処理できます。プロトコル(WSまたはWSS)は、Apache構成のProxyPass
ディレクティブで指定されたURLによって決定されます。 ProxyPass
指令でws://
使用すると、WS接続が処理されます。 wss://
使用すると、WSS接続が処理されます。バックエンドサーバーは、対応するプロトコルもサポートする必要があります。
SSL/TLSでWebSocketプロキシを保護するには、プロキシにHTTPSを使用するようにApacheを構成することが含まれます。これには、SSL証明書(例:Let's Encryptから)を取得し、それを使用するようにApacheを構成する必要があります。これを行う方法の基本的な例は次のとおりです。
<code class="apache"><virtualhost> ServerName example.com ProxyPreserveHost On SSLEngine on SSLCertificateFile /path/to/your/certificate.crt SSLCertificateKeyFile /path/to/your/private.key <proxy> Order deny,allow Allow from all </proxy> ProxyPass /ws wss://backend.example.com:8080/ws ProxyPassReverse /ws wss://backend.example.com:8080/ws RequestHeader set Upgrade websocket RequestHeader set Connection Upgrade </virtualhost></code>
/path/to/your/certificate.crt
および/path/to/your/private.key
を、SSL証明書とプライベートキーファイルへの実際のパスで置き換えます。サーバーの構成に基づいてパスを調整する必要がある可能性があります。安全な通信のためにWSS接続を受け入れるようにバックエンドサーバーも構成する必要があることを忘れないでください。 Apacheサーバーがポート443でリッスンするように構成されていること、および適切なファイアウォールルールが整っていることを確認してください。このセットアップは、クライアントとApacheプロキシの間の安全な接続を確立し、次にプロキシとバックエンドサーバーの間の安全な接続を確立します。特定のニーズとセキュリティ要件に応じて、追加のSSL指令を追加する必要がある場合があります。
以上がmod_proxy_wstunnelを使用して、websocketプロキシのApacheを構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。