Atualize ProxyPassReverse conforme abaixo.
ProxyPassReverse /myapp http://ext-domain/myapp
Consulte: link
Eu tenho o servidor Apache (2.2) com configuração abaixo para o proxy reverso para o aplicativo sendo executado no tomcat (6) na porta 8080.
....
ServerName ext-domain
ProxyPreserveHost On
ProxyPass /myapp http://int-domain:8080/myapp
ProxyPassReverse /myapp http://int-domain:8080/myapp
....
Quando eu acesso abaixo do URL do navegador
"http://ext-domain/myapp"
Eu recebo abaixo do URL substituído na barra de endereço do navegador.
"http://ext-domain:8080/myapp"
E o log de acesso do apache diz ...
"GET /myapp HTTP/1.1" 302 421 "-" "Mozilla/5.0"...
Como evitar essa inserção da porta 8080 no URL de resposta?
Alguém pode ajudar nisso? obrigado.
Atualize ProxyPassReverse conforme abaixo.
ProxyPassReverse /myapp http://ext-domain/myapp
Consulte: link
OK, a resposta antiga está incompleta. O culpado é: ProxyPreserveHost em . Você dificilmente precisa dessa cláusula.
O modelo de configuração inicial deve ser:
....
ServerName ext-domain
ProxyPass /app http://int-domain:8080/myapp
ProxyPassReverse /app http://int-domain:8080/myapp
....
A resposta 302 que assusta você é gerada pelo backend . Você disse ao backend o cabeçalho Host: ext-domain
, esse é o efeito de ProxyPreserveHost
, então o backend quer ser legal e obediente e se ele precisa te redirecionar 302 ele também usa o mesmo ext-domain
como um conveniência para você. O Backed sabe em qual porta você se conectou, então ele tenta usar a mesma porta que a conveniência para você. Se não é uma conveniência, então não use ProxyPreserveHost
, é a solução mais limpa e menos confusa para o problema. A maioria dos aplicativos (não todos) não exigirá ProxyPreserveHost
, mas use os cabeçalhos X-Forwaded-xxx
usuais.
O processamento 302 é mais ou menos assim:
HTTP 302 http://ext-domain:8080/app/foo
é gerado pelo backend ProxyPassReverse xxx http://ext-domain:8080/app
HTTP 302 xxx/foo
( essa etapa não acontece no seu caso ) ServerName
e semelhantes (por isso, o significado completo de ProxyPassReverse /app42 ...
é para o Apache dizer 302 http://ext-domain/app42
) ServerName
configurado incorretamente. Tags proxy reverse-proxy apache-2.2