同じURLで行われ、ヘッダー「Upgrade:websocket」とURLスキーマws://だけが異なる場合に、Apache2をプロキシWebSocket接続(たとえばBrowserSync)に構成する方法は?
例えば:
HTTP request:
GET http://example.com/browser-sync/socket.io/?... HTTP/1.1
...
WebSocket request:
GET ws://example.com/browser-sync/socket.io/?... HTTP/1.1
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
...
私が見つけたすべての例では、「<Location/ws> ...」や「ProxyPass/ws /ws://example.com/」などの一部のパスのみをリダイレクトします
私の現在の設定:
ProxyRequests off
<Location />
ProxyPass http://127.0.0.1:3000/
ProxyPassReverse /
</Location>
mod_proxy、mod_proxy_http、mod_proxy_wstunnelが有効になっています。
自分に答える。
RewriteEngineを使用して、 この投稿 で与えられたヒント、およびWebSocketハンドシェイク仕様:
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/$1 [P,L]
ProxyRequests off
<Location />
ProxyPass http://127.0.0.1:3000/
ProxyPassReverse /
</Location>
メタリムに感謝します!参考までに、完全な構成をここに公開します。
<VirtualHost *>
ServerName example.org
ServerAlias *.example.org
ServerAdmin [email protected]
ProxyRequests Off
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://192.168.1.1/$1 [P,L]
ProxyPass / http://192.168.1.1/ retry=1
ProxyPassReverse / http://192.168.1.1/
ErrorLog /var/log/Apache2/example.org.error.log
CustomLog /var/log/Apache2/example.org.access.log combined
</VirtualHost>