如何配置 Apache2 来代理 WebSocket 连接(例如,BrowserSync),如果它是在同一个 URL 上创建的,唯一的区别是标题“升级: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
...
我找到的所有示例,仅重定向某些路径,例如“
我目前的配置:
ProxyRequests off
<Location />
ProxyPass http://127.0.0.1:3000/
ProxyPassReverse /
</Location>
mod_proxy、mod_proxy_http 和 mod_proxy_wstunnel 已启用。
最佳答案
回答我自己。
使用 RewriteEngine,提示由 this post 给出, 和 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>
关于同一 URL 上的 Apache2 WebSockets 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29792372/