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.
quelle
forcing proxy-throughput with http://[REDACTED].dev/ws://localhost:8082/socket.io/
(domain.dev<VirtualHost>
in der genau beschriebenen Reihenfolge innerhalb des Blocks platziert werden, auch wenn Sie den Dokumentstamm verwenden (z/var/www/html
. B. ). Ich habe fast 2 Stunden damit verbracht herauszufinden, warum diese Änderungen nicht richtig funktionieren, nur um herauszufinden, dass die ÄnderungenRewriteRule
nicht auf der Root-Ebene von funktionierenhttpd.conf
(obwohl sieProxyPass
funktionieren). DieProxyPass
Direktiven funktionieren nicht in<Directory>
Blöcken oder.htaccess
Dateien (obwohl dies derRewriteRule
Fall ist), daher befindet sich der logische Ort zum Gruppieren dieser Änderungen in<VirtualHost>
.