Я пытаюсь настроить Apache 2.4 для прокси соединения websocket для socket.io с сервером node.js websocket, используя mod_proxy_wstunnel. У нас это работало нормально с socket.io 0.9, но в версии 1.0 они изменили конечную точку сокета на параметр запроса, и теперь у меня возникают проблемы с настройкой apache с правильными инструкциями прокси.
Все запросы /socket.io/?EIO=N&transport=websocket
(где N - любая цифра, обычно 2) должны быть переадресованы ws://localhost:8082/socket.io/
, но все другие запросы должны быть перенаправлены http://localhost:8082/socket.io/
.
Я пробовал варианты обоих следующих конфигов:
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/
Из моего поискового запроса я понял, что ProxyPass и Locations не могут нацеливаться на строки запроса, так есть ли здесь другой вариант? Пути жестко запрограммированы в socket.io, поэтому если не разветвлять всю библиотеку, я не могу их изменить.
источник
forcing proxy-throughput with http://[REDACTED].dev/ws://localhost:8082/socket.io/
(domain.dev<VirtualHost>
блока в точном порядке, даже если вы используете корневой каталог документа (например/var/www/html
). Я потратил почти 2 часа, пытаясь выяснить, почему эти изменения не работали должным образом, только чтобы выяснить, чтоRewriteRule
они не функционируют на корневом уровнеhttpd.conf
(хотяProxyPass
и работают). ЭтиProxyPass
директивы не работают в<Directory>
блоках или.htaccess
файлах (хотяRewriteRule
«s делать), так что логическое место в группе эти изменения в<VirtualHost>
.