Vaadin 7.1.5 Push を Apache Tomcat 7.0.42 + Apache HTTP サーバー (mod_proxy_wstunnel を使用した 2.2.14) で動作させようとしています。
Vaadin アプリケーションと WebSocket を使用したプッシュは、Tomcat に直接アクセスすると (つまりhttp://mydomain:8080/myapp
) 正常に動作します。Apache モジュール mod_proxy および mod_proxy_wstunnel を使用してアクセスしようとすると、問題が発生します。アプリケーションがハングし、ロード インジケーターが赤くなり、ブラウザ コンソールのプッシュ リクエストで次のエラーが発生します。
HTTP Status 501 - Websocket protocol not supported
type Status report
message Websocket protocol not supported
description The server does not support the functionality needed to fulfill this request.
Apache Tomcat/7.0.42
Push が必要になる前は、mod_jk を使用して からhttp://mydomain/myapp
にリクエストを転送していましたhttp://mydomain:8080/myapp
。どうやら mod_jk は WebSocket をサポートしていないため、ProxyPass ディレクティブを使用することにしました。これが私のApache設定です:
ProxyPass /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/
ProxyPassReverse /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/
ProxyPass /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPassReverse /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPass /myapp http://localhost:8080/myapp
ProxyPassReverse /myapp http://localhost:8080/myapp
mod_proxy_wstunnel のせいだと思っていましたが、http://echo.websocket.orgをプロキシすると問題なく動作するようです。Atmosphere によって 501 エラーがスローされることがわかりましたが、デバッグ方法がわかりません。ws プロキシを削除すると (プッシュで WS の代わりに HTTP が使用されるため)、すぐに「セッションの期限切れ」エラーが発生します。
Apache HTTPサーバーからApache Tomcatにプッシュリクエストを適切にプロキシする方法を知っている人はいますか?