Proxy reverso e tomcat com reconhecimento de URL solicitado

Proxy reverso e tomcat com reconhecimento de URL solicitado

Eu configurei uma configuração de infraestrutura onde um proxy reverso do Apache encerra solicitações SSL. Em seguida, as solicitações são enviadas por proxy para outro servidor web frontend Apache e, novamente, este é conectado via mod_jk/AJP a um Tomcat. A configuração parece funcionar perfeitamente, sem uma exceção. O Tomcat atende webservices WSDL e nesses arquivos XML uma tag inclui o local do host que deve ser idêntico ao URL solicitado.

Devido à configuração atual, o local do host representa o URL interno do servidor web front-end (conectado ao jp) e não o URL externo solicitado. Uma primeira tentativa de resolver esse problema foi descartar a URL externa como uma URL de proxy no tomcats server.xml, mas esse método não reconhece solicitações HTTP ou HTTPS. Eu tenho que determinar um.

Além disso, os serviços também estão atualmente acessíveis em outros servidores front-end com URLs completamente diferentes (uma configuração mais simples sem proxy reverso).

Espero ter descrito meu problema de forma compreensível. Como posso informar o Tomcat sobre o URL solicitado ou talvez deva passar o URL solicitado para o frontend Apache? Estou um pouco preso no momento.

Desde já, obrigado.

/editar

Uma breve visão geral da sequência de solicitação:

**customerX** -- REQUEST HTTP|HTTPS -- **host.external/customerX** -- PASS HTTP -- **customerX.internal** -- AJP -- **tomcat**

ProxyPreserveHost ativadonão funciona porque passa host.external para o frontend apache e não há nenhum host virtual que corresponda a esse host virtual, o que leva a um erro 404 - autoexplicativo.

A configuração não é nada especial. O proxy reverso acessível externo possui 2 hosts virtuais (HTTP|HTTPS). Ambos os hosts virtuais estão cientes de cada cliente que atendemos no contexto /customerX, /customerY e assim por diante. Por exemplo, o 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>

Eu sei, a segunda linha está implícita.

No segundo apache há um host virtual (somente HTTP) para cada cliente com o nome do servidor correspondente e os JkMounts necessários para webapps tomcats:

<VirtualHost *:80>
        ServerName customerX.internal

        JkMount ... 
</VirtualHost>

informação relacionada