Apache mod_proxy: пересылка защищенного веб-сокета на незащищенный

Библиотека веб-сокетов, на которую я полагаюсь ( PHP-Websockets ), еще не поддерживает безопасные сокеты ( wss ). Мой веб-сайт обслуживается через https , поэтому я не могу использовать небезопасные соединения ws .

Я пытаюсь использовать Apache mod_proxy для пересылки безопасный запрос, который поступает от браузера к клиенту.

Javascript

var ws = new Websocket('wss://example.com/_ws_/');

Apache VirtualHosts

ProxyPass        "/_ws_/" "ws://127.0.0.1:8080/"
ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/"
# I've also tried "/_ws_/" "ws://example.com:8080/"  Same error below

При попытке подключения браузер получает 500 Ошибка сервера . Журналы показывают:

Для URL / _ws_ / не действовал обработчик протокола. Если вы используете версию mod_proxy для DSO, убедитесь, что подмодули прокси включены в конфигурацию с помощью LoadModule.

Я подтвердил, что если я удалю правила прокси, прекратите перенаправление пользователей на https и попробуйте подключиться к незащищенным сокетам из браузера: new Websocket ('ws: //example.com/') , все работает нормально.

Мои загруженные модули Apache включают mod_ssl.c , mod_proxy.c и mod_proxy_http.c

Apache 2.4

6
задан 23 September 2016 в 10:13
1 ответ

Чтобы все заработало, мне также нужно было загрузить mod_proxy_wstunnel

После этого, этот набор правил заставил все заработать: (в VirtualHost домена, который получает и проксирует запрос webocket)

<IfModule mod_proxy.c>
    ProxyPass "/_ws_/" "ws://127.0.0.1:8080/"
    ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/"
</IfModule>

Браузер может затем связаться с backend WS сервером через HTTPS порт:

var ws = new Websocket('wss://example.com/_ws_/');
9
ответ дан 3 December 2019 в 00:18

Теги

Похожие вопросы