
He configurado una configuración de infraestructura donde un proxy inverso de Apache finaliza las solicitudes SSL. Luego, las solicitudes se envían a otro servidor web Apache frontal y luego nuevamente este se conecta a través de mod_jk/AJP a un Tomcat. La configuración parece funcionar sin problemas sin una excepción. Tomcat sirve servicios web WSDL y en estos archivos XML una etiqueta incluye la ubicación del host que debe ser idéntica a la URL solicitada.
Debido a la configuración actual, la ubicación del host representa la URL interna del servidor web frontend (conectado por ajp) y no la URL externa solicitada. Un primer intento de resolver este problema fue disponer la URL externa como una URL proxy dentro de Tomcats server.xml, pero este método no reconoce las solicitudes HTTP o HTTPS. Tengo que determinar uno.
Además, actualmente también se puede acceder a los servicios a través de otros servidores frontend con URL completamente diferentes (una configuración más simple sin un proxy inverso).
Espero haber descrito mi problema de forma comprensible. ¿Cómo puedo hacer que Tomcat conozca la URL solicitada o tal vez debería pasar la URL solicitada al frontend Apache? Estoy un poco estancado en este momento.
Gracias de antemano.
/editar
Una breve descripción general de la secuencia de solicitud:
**customerX** -- REQUEST HTTP|HTTPS -- **host.external/customerX** -- PASS HTTP -- **customerX.internal** -- AJP -- **tomcat**
ProxyPreserveHost activadono funciona porque pasa host.external al frontend apache y no hay ningún host virtual que coincida con este host virtual, lo que genera un error 404, que se explica por sí mismo.
La configuración no es nada especial. El proxy inverso accesible externo tiene 2 hosts virtuales (HTTP|HTTPS). Ambos hosts virtuales conocen a cada cliente al que atendemos en el contexto /clienteX, /clienteY, etc. Por ejemplo, el host virtual HTTP:
<VirtualHost *:80>
ServerName host.external
ProxyPass /customerX http://customerX.internal
ProxyPassReverse /customerX http://customerX.internal
ProxyPass /customerY http://customerY.internal
ProxyPassReverse /customerY http://customerY.internal
...
</VirtualHost>
Lo sé, la segunda línea está implícita.
En el segundo Apache hay un host virtual (solo HTTP) para cada cliente con el nombre del servidor correspondiente y los JkMounts necesarios para las aplicaciones web de Tomcats:
<VirtualHost *:80>
ServerName customerX.internal
JkMount ...
</VirtualHost>