Библиотека веб-сокетов, на которую я полагаюсь ( 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
Чтобы все заработало, мне также нужно было загрузить 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_/');