Ich versuche, Apache 2.4 so zu konfigurieren, dass die Websocket-Verbindung für socket.io über mod_proxy_wstunnel an einen node.js-Websocket-Server weitergeleitet wird. Wir hatten dieses Problem mit socket.io 0.9, aber mit der Version 1.0 haben sie den Socket-Endpunkt in einen Abfrageparameter geändert, und jetzt habe ich Probleme, Apache mit den richtigen Proxy-Anweisungen zu konfigurieren.
Alle Anfragen an /socket.io/?EIO=N&transport=websocket
(wobei N eine Ziffer ist, normalerweise 2) müssen an weitergeleitet werden ws://localhost:8082/socket.io/
, aber alle anderen Anfragen müssen an weitergeleitet werden http://localhost:8082/socket.io/
.
Ich habe Variationen der beiden folgenden Konfigurationen ausprobiert:
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/
Ich habe durch meine Google-Suche festgestellt, dass ProxyPass und Locations keine Abfragezeichenfolgen ansteuern können. Gibt es hier also eine andere Option? Die Pfade sind fest in socket.io codiert, so dass ich sie nicht ändern kann, wenn ich nicht die gesamte Bibliothek gegabelt habe.