Estoy tratando de configurar un servidor con múltiples aplicaciones web que serán atendidas a través de Apache VirtualHost (Apache que se ejecuta en el mismo servidor). Mi principal restricción es que cada aplicación web debe usar cifrado SSL. Después de buscar en Google por un tiempo y mirar otras preguntas sobre stackoverflow, escribí la siguiente configuración para VirtualHost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Aunque https://host.example.org:8443 es accesible, https://host.example.org no lo es, lo que anula el propósito de mi configuración de host virtual. Firefox se queja de que, aunque se conectó con éxito al servidor, la conexión se interrumpió. También recibo la siguiente advertencia en el error.log de apache:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
En la aplicación web (un servidor Tomcat) el registro de acceso muestra una extraña solicitud de acceso:
"?O^A^C / HTTP/1.1" 302
La siguiente es la solicitud de acceso correcta que obtengo cuando me conecto directamente a https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Finalmente, también debo mencionar que el host virtual funciona perfectamente bien cuando no uso SSL.
¿Cómo puedo hacer que esto funcione?
ProxyPreserveHost On
es casi siempre incorrecto, inútil y casi siempre se rompeProxyPassReverse
. Como nota al margenProxyRequests off
es el valor predeterminado, por lo tanto redundante.