Estou tentando configurar o Apache 2.4 para proxy da conexão websocket do socket.io para um servidor node.js websocket, usando mod_proxy_wstunnel. Tivemos isso funcionando bem com o socket.io 0.9, mas com a versão 1.0 eles mudaram o terminal do soquete para um parâmetro de consulta e agora estou tendo problemas para configurar o apache com as instruções corretas do proxy.
Todas as solicitações para /socket.io/?EIO=N&transport=websocket
(onde N é qualquer dígito, geralmente 2) precisam ser encaminhadas ws://localhost:8082/socket.io/
, mas todas as outras solicitações precisam ser encaminhadas http://localhost:8082/socket.io/
.
Eu tentei variações das duas configurações a seguir:
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/
Concluí no meu blog que o ProxyPass e Locations não podem segmentar cadeias de caracteres de consulta, então existe alguma outra opção aqui? Os caminhos são codificados no socket.io, de modo que não é possível alterá-los por toda a biblioteca.