Reescrevendo 302 URLs ReDirect do App Server com o Apache Proxy no meio

7

Eu tenho uma configuração estranha. Parece assim:

Browser ----------> HTTPs Proxy ------> Apache HTTP -----> Tomcat AJP
           HTTPS                 HTTP                AJP

No proxy HTTPS (um proxy muito burro), um URL aparece como https: //proxy.domain.com/app. Em seguida, ele é tunelado para o Apache usando HTTP, como é http: //apache.domain.com/app (passando no host proxy.domain.com). O Apache então encapsula a solicitação localmente usando o protocolo AJP para ajp: // localhost: 8009 / app /.

Às vezes, o servidor do aplicativo quer redirecionar o caminho solicitado. Por exemplo, redirecionar / app / para / app / webapp. Então, ele envia um 302 de volta para o apache redirecionando o caminho - provavelmente algo como ajp: // localhost: 8009 / app / webapp. O Apache então reescreve a URL de redirecionamento para http: //proxy.domain.com/app/webapp. O proxy HTTPS é burro, por isso não analisa o redirecionamento e altera o http para https.

Então, gostaria de saber se posso configurar o Apache para reescrever o URL de redirecionamento 302 para enviar o usuário para https.

Aqui está a configuração que tenho até agora no https.conf do Apache:

ProxyPreserveHost       on
RewriteEngine           on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app

Eu tentei usar ProxyPassReverse , mas não consegui descobrir como forçá-lo a reescrever o URL de redirecionamento 302 com https em vez de http.

Alguma opinião?

    
por George 14.09.2010 / 23:30

2 respostas

9

Eu sempre luto com um problema por horas antes de desistir e postar uma pergunta - apenas para resolver meus próprios problemas minutos depois de postar ...

Para os interessados, a solução é não para usar o ProxyPassReverse , mas usar a diretiva Header - você pode mexer com cabeçalhos de saída. Nesse caso, posso capturar o cabeçalho de resposta do local e executar um regex nele para corrigir o protocolo do URL:

ProxyPreserveHost       on
RewriteEngine           on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Header edit Location ^http(\:\/\/proxy.*)$ https$1

Voila!

Se o apache reclamar, pode ser que os mod_headers ainda não estejam habilitados: a2enmod headers

    
por 15.09.2010 / 01:22
2

Eu encontrei outra opção.

Com base no link e Apache ReverseProxyPass redireciona para http em vez de https , parece que alguns servidores reconhecem o X-Forwarded Cabeçalho -Protocol. Pode-se fazer com que o Tomcat a reconheça adicionando:

<Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="x-forwarded-protocol" />

para server.xml .

    
por 30.03.2013 / 20:54