WebソケットとリバースプロキシApacheに問題があります。最新リリース2.4.5でアップグレードし、モジュールをロードしましたmod_proxy_wstunnel
。
Httpd.conf:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.toto.fr
ServerAlias toto.fr
ProxyPass /my_app http://1X.X.X.1:8080/my_app
ProxyPassReverse /web_pmr http://1X.X.X.1:8080/my_app
ProxyPassReverseCookiePath /my_app /
ProxyPassReverseCookieDomain localhost my_app
ProxyRequests off
ProxyTimeout 15
#WEBSOCKETS
ProxyPass /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/my_app/BasicWebsocketServlet retry=0
ProxyPassReverse /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/web_pmr/BasicWebsocketServlet retry=0
ErrorLog "logs/my_app_error.log"
LogLevel debug
CustomLog "logs/my_app_access.log" combined
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
ローカルURLでテストすると、WebSocketは機能していますが、リバースプロキシApacheを使用すると、Tomcatログにトレースがありません。
この行:
ProxyPass /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/my_app/BasicWebsocketServlet retry=0
これの前に来る必要があります:
ProxyPass /my_app http://1X.X.X.1:8080/my_app
説明( https://httpd.Apache.org/docs/2.4/mod/mod_proxy.html#proxypass から):
ProxyPassディレクティブの注文
構成されたProxyPassおよびProxyPassMatchルールは、構成順にチェックされます。一致する最初のルールが勝ちます。したがって、通常は、競合するProxyPassルールを最長のURLから順に並べ替える必要があります。そうしないと、長いURLに対する後のルールは、URLの先頭の部分文字列を使用する前のルールによって非表示になります。ワーカーの共有には何らかの関係があることに注意してください。対照的に、Locationブロックに配置できるProxyPassディレクティブは1つだけであり、最も具体的な場所が優先されます。
同じ理由で、除外は一般的なProxyPassディレクティブの前に行う必要があります。