ssl – Apache mod_proxy: reenviar websocket seguro a no seguro

Pregunta:

La biblioteca websocket en la que confío ( PHP-Websockets ) aún no admite sockets seguros ( wss ). Sin embargo, mi sitio web se sirve a través de https , por lo que no puedo usar conexiones ws inseguras.

Estoy tratando de usar el mod_proxy de Apache para reenviar la solicitud segura que proviene del navegador al cliente.

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

Al intentar conectarse, el navegador recibe un 500 Server Error . Los registros muestran:

Ningún controlador de protocolo era válido para la URL / _ws_ /. Si está utilizando una versión DSO de mod_proxy, asegúrese de que los submódulos de proxy estén incluidos en la configuración mediante LoadModule.

Confirmé que si elimino las reglas de proxy, dejo de redirigir a los usuarios a https e intento conectarme a sockets inseguros desde el navegador: new Websocket('ws://example.com/') , todo funciona bien.

Mis módulos de Apache cargados incluyen mod_ssl.c , mod_proxy.c mod_proxy_http.c

Apache 2.4

Respuesta:

Para que las cosas funcionen, también necesitaba cargar mod_proxy_wstunnel

Una vez que lo hice, este conjunto de reglas hizo que todo funcionara: (en el VirtualHost del dominio que recibe y envía la solicitud de websocket)

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

Luego, el navegador puede comunicarse con el servidor WS back-end a través del puerto HTTPS:

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

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım