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.
fonte
forcing proxy-throughput with http://[REDACTED].dev/ws://localhost:8082/socket.io/
(<VirtualHost>
bloco na ordem exata descrita, mesmo se você estiver usando a raiz do documento (por exemplo/var/www/html
). Passei quase duas horas tentando descobrir por que essas mudanças não estavam funcionando corretamente, apenas para descobrir queRewriteRule
elas não estavam funcionando no nível raizhttpd.conf
(emboraProxyPass
estivesse funcionando). AsProxyPass
diretivas não funcionam em<Directory>
blocos ou.htaccess
arquivos (embora funcionemRewriteRule
); portanto, é o local lógico para agrupar essas alterações<VirtualHost>
.