2016-06-18 11 views
0

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を実行する方法についてのヘルプはありますか?

答えて

1

私は疲れて、Nginxを試すことに決めました。

3時間の範囲内で、WebSockets workingを取得しただけでなく、サーバー上のすべてのサイトをそのサイトに移動しました。超簡単。 WebSocketのため

魔法の線は、nginx.confである:

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade"; 

Iが「アップグレード」することを理解明示的に維持されるように構成されなければならない特別な「ホップバイホップ」ヘッダです。

私はApacheに似た解決策があることを願っていますが、これについては少数のドキュメントしかありません!

関連する問題