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?
fuente
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.localhost
no funciona.Prueba esta configuración
Si su aplicación necesita tener acceso a la información SSL desde la conexión proxy, debería considerar usar mod_proxy_ajp y el conector tomcat ajp1.3.
fuente
Pero si su objetivo es ejecutar múltiples aplicaciones web habilitadas para SSL en el mismo servidor. agregar apache al frente no los equilibrará usando su configuración anterior, aún necesitaría un equilibrador de carga o podría usar el módulo equilibrador proxy de apache con algo como lo siguiente:
fuente
Bueno, lo que no entiendo aquí es por qué necesita tener una conexión SSL desde su apache a su aplicación que parece estar en la misma máquina ( http: // localhost: 8443 / ).
Supongo que la forma habitual de configurar cosas como esta es tener un apache que proporcione encriptación SSL al lado del "cliente", por ejemplo, Internet, y tener una conexión sin cifrar a la aplicación. Esto también le da más libertad para depurar las respuestas de su aplicación.
La otra cosa que Dave Cheney mencionó es usar el conector tomcat nativo para tener equilibrio de carga y otras características.
fuente
¿Realmente necesita un proxy para un servicio HTTPS? Es posible que desee proxy al servicio no SSL en localhost, por ejemplo
fuente
Primero, miraría si puede hacer una solicitud de localhost a localhost: 8443 y ver si eso es exitoso (es decir, hacer un GET o wget http: // localhost: 8443 )
No estoy muy seguro de por qué su host virtual havin ga escucha en el puerto 443 y luego lo envía a otro host SSL
¿Por qué la aplicación no puede usar 443 de forma nativa? si no puede cambiarlo, puede usar iptables para redirigir el puerto
fuente
Verifique su registro de errores SSL y asegúrese de no tener errores acerca de no poder verificar la cadena de certificados de CA.
fuente