Мне было трудно найти это по сети, и, наконец, я нашел способ сделать это.
Проблема заключалась в том, что как только http перенаправлялся на порт https на внутреннем ELB, он возвращался обратнона порт 80, таким образом, создавая петлю.Это происходит потому, что ELB выгружает SSL, а затем снова подключается к порту 80.
Наконец, после некоторых исследований я получил правильное правило перезаписи для управления X-Forwarded-Proto таким образом, что даже если ELB разгрузит SSL-котатеперь доходит до того, что исходный запрос использовал SSL.
Это делается с помощью Tomcat Valves на Tomcat 8. Я уверен, что это можно сделать и в более ранних версиях.Я включил правила перезаписи на Tomcat, используя клапаны.После этого это было так же просто, как написание правил перенаправления на Apache.
Вот шаги:
Шаг 1:
a.Откройте context.xml в папке conf tomcat b.Вставьте следующую строку чуть ниже
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
Примечание. Это активирует клапан в глобальном масштабе.Если это необходимо включить для определенного хоста, его следует вставить в файл server.xml для этого конкретного домена
Шаг 2:
a.Откройте conf / server.xml b.Вставьте следующую строку чуть выше </Host>
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
Шаг 3:
a.Откройте папку, где находится web.xml.Например, если приложение размещено в ROOT, тогда web.xml будет находиться в webapps / ROOT / WEB-INF
b.Аналогично, если приложение размещено в webapps / myappfolder, тогда файл web.xml будет находиться в webapps / myappfolder / WEB-INF
c.В папке WEB-INF создайте новый файл rewrite.config .и вставьте следующее правило перезаписи:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]