O proxy reverso do Apache pula de volta ao protocolo inseguro após redirecionar

1

Eu instalei um servidor apache de proxy reverso que lida com a criptografia SSL de um tomcat. Temos um aplicativo da web struts, e toda vez que usamos response.sendRedirect() , o aplicativo retorna ao protocolo HTTP normal em vez de ficar em HTTPS. O aplicativo precisa ser executado com os dois protocolos e não consigo lidar com o SSL no contêiner do tomcat.

Eu posso usar HTTPS e navegar por links e ações. Mas se eu chegar a uma ação que usa redirecionamento, será apenas HTTP. Por que isso acontece?

SSLProxyEngine [off|on] # (Differs between the ssl and the other normal conf)
ProxyPreserveHost On
ProxyPass / http://mysite:1234/
ProxyPassReverse / http://mysite:1234/

Esta é minha configuração. Pensei em trocar o http para https na configuração ssl, mas isso leva a isso:

Bad Gateway

The proxy server received an invalid response from an upstream server. Additionally, a 502 Bad Gateway error was encountered while trying to use an ErrorDocument to handle the request.

Como posso obter os redirecionamentos para manter o HTTPS?

    
por Dennis Ich 04.10.2012 / 17:47

2 respostas

2

Se sendRedirect usar um caminho relativo, o Tomcat adicionará elementos absolutos, incluindo esquema (http / https) e nome do servidor.

O esquema será padronizado para http, a menos que você o substitua. O nome do servidor virá do cabeçalho do host que você já passou com cuidado.

Eu tive o mesmo problema e usei um novo conector Tomcat (ao lado do existente) em uma porta separada que substitui o esquema e define a porta como uma boa medida:

<Connector port="8443" protocol="HTTP/1.1" URIEncoding="UTF-8"
                    connectionTimeout="20000"
                    scheme="https" proxyPort="443"/>

Em seguida, no Apache, o host virtual SSL possui:

ProxyPass / http://<tomcat_server>:8443/

O host virtual HTTP simples continua a usar a porta Connector existente (8080)

Como alternativa, você pode codificar o local de redirecionamento ao chamar sendRedirect (), mas isso é obviamente inflexível.

    
por 04.10.2012 / 18:31
0

Eu resolvi esse problema apenas adicionando a seguinte diretiva ProxyPassReverse à configuração do servidor Apache:

ProxyPassReverse / http://<apacheserver>:<httpsport>/
    
por 20.03.2018 / 15:06