¿Cómo configurar mod_proxy a ProxyPass basado en http vs https?

9

Tengo Apache Tomcat ejecutándose con SSL habilitado. Tengo el Servidor HTTP Apache que actúa como un proxy inverso, por lo que si los usuarios presionan http: // myserver / tomcat / se pasan a http: // myserver: 8080 .

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

También tengo el servidor HTTP Apache configurado para SSL, así que cuando los usuarios presionen https: // myserver / tomcat / deberían pasar a https: // myserver: 8443 / .

Con la configuración actual de ProxyPass y ProxyPassReverse, se los redirigirá a la URL que no sea SSL. ¿Cómo puedo configurar el paso de proxy para que redirija a diferentes protocolos y puertos según la solicitud entrante?

Es decir, si alguien entra por HTTPS, ¿cómo puedo redirigirlo a mi tomcat @ https: // myserver: 8443 ?


Actualizar:

@ mike-insch

Lo intenté:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>

Ahora cuando visito: https: // myserver / tomcat / me sale "página no encontrada". En el registro de errores, veo "El archivo no existe: / var / apache2 / htdocs / tomcat"

Lo cual es correcto, pero esperaba que la solicitud se enrutara a Tomcat ejecutándose en https: // myserver: 8443 / .

Supongo que necesito mirar más a los hosts virtuales, a menos que algo se vea claramente mal.

codecraig
fuente
No creo que necesites la NameVirtualHostdirectiva aquí. Además, deberá agregar las directivas apropiadas para habilitar SSL dentro de su <VirtualHost *:443>sección.
Mike Insch

Respuestas:

5

Debe hacer esto a través de dos <VirtualHost *:X>directivas independientes . Sus HTTPdirectivas entran <VirtualHost *:80>mientras que sus HTTPSdirectivas entran <VirtualHost *:443>. Ajuste según sea necesario si su servidor tiene múltiples hosts virtuales basados ​​en direcciones o en nombres configurados. Consulte la documentación de Apache 2 para más detalles.

Mike Insch
fuente
Así que agregué lo siguiente: NameVirtualHost *: 443
codecraig
3
No olvides agregar el SSLProxyEngine en la directiva
Ryan
6

Para completar: si es una opción, es una buena idea terminar SSL en Apache, en lugar de que Tomcat también lo maneje. Si solo se puede acceder a Tomcat desde Apache, esto es más simple y no menos seguro.

En esta configuración, Apache usaría proxy HTTP y HTTPS para http://myserver:8080/:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
David Carboni
fuente
1
Si hace esto, no necesita repetir las directivas de proxy en ambos VirtualHosts. Puede simplemente sacarlos al contexto del servidor.
Amit Naidu