Undertowサーバーを使用してWebソケットを有効にしました。 Undertowサーバーを直接実行すると、WebSocketは正常に動作します。私はHTTPSを使って私のページを提供し、私はjavacriptで "wss:
"を使ってエンドポイントをテストします。サーバーをUndertowでWebSocketにリバースプロキシとしてApacheを使用する方法
しかし、私はApacheをリバースプロキシとして使用しようとしており、WebSocket接続がUndertowサーバーに到達できるようにしたいと考えています。これは私の現在の仮想ホストである:
ここ<VirtualHost *:80 *:443>
ServerName test.example.org
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.org/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.org/chain.pem
ProxyPass/http://test.example.org:44444/
ProxyPassReverse/http://test.example.org:44444/
</VirtualHost>
、アンダートウは、ポート44444上のHTTPサーバ(HTTPSではない)として開始され、SSLのセキュリティは、Apacheによって行われます。
すべてのHTMLページがうまく動作しますが、私はWebSocketの接続を開始しようとすると、私はこのエラー(クローム)を取得:私は、[ネットワーク]タブを見ると、私が実際にいることがわかり
WebSocket connection to 'wss://test.example.org/websockets/echo' failed: Error during WebSocket handshake: 'Upgrade' header is missing
とし、 "Connection: Upgrade
"と "Upgrade: WebSocket
"という "wss://"呼び出しが行われたときに、サーバーからの応答に2つのヘッダーがありません。これらのヘッダは、ApacheなしでUndertowに直接接続すると、になります。ない "WSS:
「Sec-WebSocket-Accept
」と「Sec-WebSocket-Location
」ヘッダがありますが、私はこれが第二の問題だと思い、「Sec-WebSocket-Location
は」「//test.example.org/websockets/echo WS」です://test.example.org/websockets/echo 'というように、UndertowはHTTPSではなくHTTPで動作します。
最後に、mod_proxy_wstunnelのドキュメントでは、「接続は自動的にWebソケット接続にアップグレードされます」と表示されます。これは何を意味するのでしょうか? ApacheはHTTP接続をWebSocket接続にアップグレードしていますか?これはではない私が欲しいものです!私は最初のHTTPリクエストとアップグレードプロセスを自分で処理したい、、Undertowを使用しています。最初のHTTP接続の情報を使用して、ユーザーが要求されたエンドポイントに接続できるかどうかを確認し、そうであればプログラムでUndertowのWebSocketProtocolHandshakeHandler#handleRequest(exchange)
を呼び出してWebSocket接続にアップグレードします。私は、Apacheがすべてを妨害することなく通過するようにしたい。
Apacheリバースプロキシの背後にあるUndertowを使ってWebSocketを実行する方法についてのヘルプはありますか?