Proxy reverso Apache para websocket no mesmo contexto que http

Proxy reverso Apache para websocket no mesmo contexto que http

Eu tenho uma instalação do Apache/2.4.6 funcionando como proxy reverso para alguns aplicativos. Agora tenho que configurar outro. O proxy HTTP está funcionando muito bem, mas em algumas seções da página da web, o cliente tenta iniciar uma conexão de websocket.

O problema é que o URL é parcialmente compartilhado:

Solicitação HTTP:http://domain/context/[whatever]

Solicitação de WS:ws://domain/context/specific-text?param1&param2

Não é possível usar If(verificar o protocolo) porque o ProxyPass não pode entrar <If>.

Configuração tentada:

<Location /context/specific-text>
    ProxyPass ws://internal.domain/context/specific-text

Antes

<Location /context/>
    ProxyPass http://internal.domain/context/

Mas não funciona, acho que por causa da barra final (inexistente).

Mais dados:

  • O soquete está reclamando de não gostar de um código "200", o Apache não está retornando uma conexão ws mas, até certo ponto, o proxy está sendo feito.
  • Tentei com e sem<Location>
  • Pensei em reescrever specific-text, specific-text/mas não gosto de manipular coisas que não consigo. O aplicativo é um produto pago, não posso perguntar se prejudicaria alguma coisa. Bem, eu poderia, só não esperaria nenhuma resposta.

Responder1

O que funciona para mim é este snippet de configuração do ProxyPass:

ProxyPass        /specific wss://0.0.0.0:4000/specific
ProxyPassReverse /specific wss://0.0.0.0:4000/specific

ProxyPass        / https://0.0.0.0:4000/
ProxyPassReverse / https://0.0.0.0:4000/

Odocumentação diz:

Solicitando diretivas ProxyPass

As regras ProxyPass e ProxyPassMatch configuradas são verificadas na ordem de configuração. A primeira regra que corresponder vence.

informação relacionada