J'essaye de configurer Apache 2.4 pour mandater la connexion websocket pour socket.io à un serveur websocket node.js, en utilisant mod_proxy_wstunnel. Nous avons bien fonctionné avec socket.io 0.9, mais avec la version 1.0, ils ont changé le point de terminaison du socket en paramètre de requête, et maintenant j'ai du mal à configurer apache avec les instructions de proxy correctes.
Toutes les demandes à /socket.io/?EIO=N&transport=websocket
(où N est un chiffre, généralement 2) doivent être transmises à ws://localhost:8082/socket.io/
, mais toutes les autres demandes doivent être transmises à http://localhost:8082/socket.io/
.
J'ai essayé des variantes des deux configurations suivantes:
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/
D'après mes recherches sur Google, ProxyPass et les emplacements ne peuvent pas cibler les chaînes de requête, y a-t-il une autre option ici? Les chemins sont codés en dur dans socket.io, donc à court de bifurquer la bibliothèque entière, je ne peux pas les changer.
la source
forcing proxy-throughput with http://[REDACTED].dev/ws://localhost:8082/socket.io/
(domain.dev<VirtualHost>
bloc dans l'ordre exact décrit, même si vous utilisez la racine du document (par exemple/var/www/html
). J'ai passé près de 2 heures à essayer de comprendre pourquoi ces changements ne fonctionnaient pas correctement, seulement pour découvrir que lesRewriteRule
ne fonctionnaient pas au niveau racinehttpd.conf
(bien queProxyPass
fonctionnaient). LesProxyPass
directives ne fonctionnent pas dans des<Directory>
blocs ou des.htaccess
fichiers (bien que ce soit leRewriteRule
cas), donc l'endroit logique pour regrouper ces modifications est<VirtualHost>
.