我正在尝试配置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/
。
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/
我从谷歌搜索中了解到ProxyPass和Locations无法定位查询字符串,因此这里还有其他选择吗?这些路径被硬编码到socket.io中,因此如果没有分叉整个库,我就无法更改它们。