Я пытаюсь настроить 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, поэтому если не разветвлять всю библиотеку, я не могу их изменить.