我正在尝试配置 Apache 2.4 以使用 mod_proxy_wstunnel 将 socket.io 的 websocket 连接代理到 node.js websocket 服务器。我们在 socket.io 0.9 上运行良好,但是在 1.0 版本中,他们将套接字端点更改为查询参数,现在我无法使用正确的代理指令配置 apache。
所有到/socket.io/?EIO=N&transport=websocket
(其中 N 是任意数字,通常为 2)的ws://localhost:8082/socket.io/
请求都需要转发到,但所有其他请求都需要转发到http://localhost:8082/socket.io/
。
我已经尝试了以下两种配置的变体:
ProxyPass /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPassReverse /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Run Code Online (Sandbox Code Playgroud)
.
RewriteRule /socket.io/?EIO=([0-9]+)&transport=websocket ws://localhost:8082/socket.io/ [QSA,P]
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Run Code Online (Sandbox Code Playgroud)
我从谷歌搜索中了解到 ProxyPass 和 Locations 无法定位查询字符串,那么这里还有其他选择吗?路径被硬编码到 socket.io 中,所以如果没有分叉整个库,我无法更改它们。