web-dev-qa-db-ja.com

WebSocketを使用したリバースプロキシmod_proxy_wstunnel

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ログにトレースがありません。

11
WhatsUp

この行:

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ディレクティブの前に行う必要があります。

22
hdgarrood