Apache2 WebSockets обратный прокси по тому же URL
Как настроить Apache2 на прокси-соединение WebSocket (например, BrowserSync), если оно сделано по тому же URL-адресу, с той лишь разницей, что заголовок "Upgrade: websocket" и схема URL ws://?
например:
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
...
все примеры, которые я нахожу, перенаправляют только некоторый путь, например " ..."или" ProxyPass/ ws/ws:/ / пример.com/"
моя текущая конфигурация:
ProxyRequests off
<Location />
ProxyPass http://127.0.0.1:3000/
ProxyPassReverse /
</Location>
mod_proxy, mod_proxy_http и mod_proxy_wstunnel являются включен.
2 ответов
отвечаю сам себе.
используя RewriteEngine, подсказка, данная этот пост, и WebSocket рукопожатие спецификация:
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/ [P,L]
ProxyRequests off
<Location />
ProxyPass http://127.0.0.1:3000/
ProxyPassReverse /
</Location>
большое спасибо metalim! Я публикую полную конфигурацию здесь для справки:
<VirtualHost *>
ServerName example.org
ServerAlias *.example.org
ServerAdmin sysadmin@example.org
ProxyRequests Off
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://192.168.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>