Proxy inverso de Apache a websocket en el mismo contexto que http

Proxy inverso de Apache a websocket en el mismo contexto que http

Tengo una instalación de Apache/2.4.6 que funciona como proxy inverso para algunas aplicaciones. Ahora tengo que configurar otro. El proxy HTTP funciona muy bien, pero en algunas secciones de la página web, el cliente intenta iniciar una conexión websocket.

El problema es que la URL está parcialmente compartida:

Solicitud HTTP:http://domain/context/[whatever]

Solicitud de WS:ws://domain/context/specific-text?param1&param2

No se puede usar If(verificando el protocolo) ya que ProxyPass no puede ingresar <If>.

Configuración probada:

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

Antes

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

Pero no funciona, supongo que debido a la barra diagonal (inexistente).

Más datos:

  • El socket se queja de que no le gusta el código "200", Apache no devuelve una conexión ws pero, hasta algún punto, se está realizando el proxy.
  • Probado con y sin<Location>
  • Pensé en reescribir specific-textpero specific-text/no me gusta manipular cosas que no manejo. La aplicación es un producto pago, no puedo preguntar si dañaría algo. Bueno, podría, pero no esperaría ninguna respuesta.

Respuesta1

Lo que me funciona es este fragmento de configuración de 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/

Ella documentación dice:

Solicitar directivas ProxyPass

Las reglas ProxyPass y ProxyPassMatch configuradas se verifican en el orden de configuración. La primera regla que coincida gana.

información relacionada