Die von mir gewählte Websocket-Bibliothek (PHP-Websockets) unterstützt noch keine sicheren Sockets (wss
). Meine Website wird jedoch über https
geschaltet, daher kann ich keine insecure ws
-Verbindungen verwenden.
Ich versuche, von Apache mod_proxy
zu verwenden, um die sichere Anfrage, die vom Browser kommt, an den Client weiterzuleiten.
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
Beim Versuch, eine Verbindung herzustellen, erhält der Browser ein 500 Server Error
. Die Protokolle zeigen:
No protocol handler was valid for the URL/_ws_/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Ich habe bestätigt, dass ich, wenn ich die Proxy-Regeln entferne, die Benutzer nicht mehr auf https
umleitet und versucht, eine Verbindung zu unsicheren Sockets über den Browser herzustellen: new Websocket('ws://example.com/')
.
Zu meinen geladenen Apache-Modulen gehören mod_ssl.c
, mod_proxy.c
und mod_proxy_http.c
Apache 2.4
Damit alles funktioniert, musste ich auch mod_proxy_wstunnel
Nachdem dies geschehen war, funktionierte dieser Regelsatz: (in VirtualHost
der Domäne, die die Websocket-Anforderung empfängt und weiterleitet)
<IfModule mod_proxy.c>
ProxyPass "/_ws_/" "ws://127.0.0.1:8080/"
ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/"
</IfModule>
Der Browser kann dann über den HTTPS-Port mit dem Back-End-WS-Server Kontakt aufnehmen:
var ws = new Websocket('wss://example.com/_ws_/');