Usiłuję skonfigurować Apache 2.4 do proxy proxy połączenia websocket dla socket.io z serwerem websocket node.js, używając mod_proxy_wstunnel. Działa to dobrze z socket.io 0.9, ale w wersji 1.0 zmieniono punkt końcowy gniazda na parametr zapytania, a teraz mam problem ze skonfigurowaniem apache z prawidłowymi instrukcjami proxy.
Wszystkie żądania do /socket.io/?EIO=N&transport=websocket
(gdzie N jest dowolną cyfrą, zwykle 2) muszą być przekazywane do ws://localhost:8082/socket.io/
, ale wszystkie inne żądania muszą być przekazywane do http://localhost:8082/socket.io/
.
Próbowałem odmian obu następujących konfiguracji:
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/
Z Google'a dowiedziałem się, że ProxyPass i Lokalizacje nie mogą kierować na ciągi zapytań, więc czy jest tu jakaś inna opcja? Ścieżki są zakodowane na stałe w socket.io, więc tak szybko, jak rozwidlenie całej biblioteki, nie mogę ich zmienić.
źródło
forcing proxy-throughput with http://[REDACTED].dev/ws://localhost:8082/socket.io/
(domain.dev<VirtualHost>
bloku w dokładnie opisanej kolejności, nawet jeśli używasz katalogu głównego dokumentu (np/var/www/html
.). Spędziłem prawie 2 godziny, próbując dowiedzieć się, dlaczego te zmiany nie działały poprawnie, po prostu aby dowiedzieć się, żeRewriteRule
nie działały na poziomie roothttpd.conf
(chociażProxyPass
działały). TeProxyPass
wytyczne nie działają w<Directory>
blokach lub.htaccess
plików (chociażRewriteRule
„s zrobić), więc logicznym miejscem do grupy tych zmian jest w<VirtualHost>
.