Apache mod_proxy: forward websocket seguro para não seguro

5

A biblioteca websocket na qual eu dependo ( PHP-Websockets ) ainda não suporta sockets seguros ( wss ). Meu site é veiculado por https , por isso não posso usar inseguros ws conexões.

Estou tentando usar o mod_proxy do Apache para encaminhar a solicitação segura que vem do navegador para o 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

Ao tentar se conectar, o navegador recebe um 500 Server Error . Os logs mostram:

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.

Confirmei que, se eu remover as regras de proxy, pare de redirecionar os usuários para https e tente conectar-se a sockets inseguros no navegador: new Websocket('ws://example.com/') , as coisas funcionam bem.

Meus módulos do Apache carregados incluem mod_ssl.c , mod_proxy.c e mod_proxy_http.c

Apache 2.4

    
por BeetleJuice 23.09.2016 / 08:44

1 resposta

7

Para que as coisas funcionassem, eu também precisava carregar mod_proxy_wstunnel

Uma vez que fiz isso, este conjunto de regras fez com que as coisas funcionassem: (no VirtualHost do domínio que recebe e faz proxies da solicitação do websocket)

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

O navegador pode entrar em contato com o servidor WS de back-end pela porta HTTPS:

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