Eu tive um tempo difícil encontrar isso na net e, finalmente, eu encontrei uma maneira de fazê-lo.
O problema foi que assim que http redirecionado para https port no ELB internamente ele era redirecionado para a porta 80, criando um loop. Isso acontece porque o ELB descarrega o SSL e, em seguida, se conecta à porta 80 novamente.
Finalmente, após algumas pesquisas, obtive a regra de reescrita correta para gerenciar o X-Forwarded-Proto de tal forma que, mesmo se o ELB descarregar o tomcat SSL, o pedido de origem estava usando SSL.
Isso é feito usando o Tomcat Valves no Tomcat 8. Tenho certeza de que isso pode ser feito em versões anteriores também. Eu habilitei reescrever regras no Tomcat usando válvulas. Depois disso, foi tão simples quanto escrever regras de redirecionamento no Apache.
Aqui estão os passos:
Etapa 1:
uma. Abra o context.xml na pasta conf do tomcat
b. Cole a seguinte linha logo abaixo
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
Nota: Isso ativará a válvula globalmente. Caso isso precise ser ativado para um host específico, ele deve ser colado dentro do server.xml para esse domínio específico
Etapa 2:
a. Abra conf / server.xml
b. Cole a seguinte linha acima de </Host>
tag
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
Etapa 3:
a. Abra a pasta onde o web.xml está. Por exemplo, se a aplicação estiver hospedada em ROOT, então web.xml estará sob webapps / ROOT / WEB-INF
b. Da mesma forma, se o aplicativo estiver hospedado em webapps / myappfolder, o web.xml estará sob webapps / myappfolder / WEB-INF
c. Na pasta WEB-INF Crie um novo arquivo rewrite.config . e cole a seguinte regra de reescrita:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]