fragen stichworte

Apache mod_proxy: sicheres Websocket an nicht sicher weiterleiten

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

antworten

Damit alles funktioniert, musste ich auch mod_proxy_wstunnel

laden

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_/');