Подтвердить что ты не робот

Переадресация HTTP на HTTPS для сервера AWS ELB и Tomcat7

У меня есть один поддомен (test.XXXX.com), указывающий на AWS ELB, который принимает запросы HTTP (80) и HTTPS (443). Я настроил SSL, сертифицированный для подключения 443 для HTTPS-соединения. Я попытался выполнить HTTP-переадресацию HTTPS на уровне Tomcat, изменив web.xml и server.xml, как указано в

http://www.journaldev.com/160/steps-to-configure-ssl-on-tomcat-and-setup-auto-redirect-from-http-to-https

Но проблема в том, что мне нужна одна конечная точка для проверки работоспособности AWS ELB, которая не выполняет перенаправление HTTP-HTTPS. Я пробовал другое решение, но не добился успеха. Я также пробовал

   <security-constraint>
                <web-resource-collection>
                        <web-resource-name>Protected Context</web-resource-name>
                        <url-pattern>/*</url-pattern>
                </web-resource-collection>

                <user-data-constraint>
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                </user-data-constraint>
    </security-constraint>
   <security-constraint>
                <web-resource-collection>
                        <web-resource-name>Protected Context</web-resource-name>
                        <url-pattern>/XXXXX/XXXXXX.html</url-pattern>
                </web-resource-collection>

    </security-constraint>

И мой сервер server.xml имеет следующую конфигурацию как

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />


<Connector port="443" maxThreads="2000" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/home/XXXXX/XXXXX.keystore" 
               keystorePass="XXXXX" clientAuth="false" keyAlias="XXXX" 
               sslProtocol="TLS" protocol="org.apache.coyote.http11.Http11Protocol"/>

Но при попытке доступа к нему через браузер он дает исключение как ERR_TOO_MANY_REDIRECTS.

введите описание изображения здесь

4b9b3361

Ответ 1

У меня есть решение вашей проблемы, но это не касается tomcat. Вы можете использовать дистрибутив Cloudfront.
Позвольте мне подчеркнуть несколько ключевых конфигураций для достижения этого через Cloudfront Distribution:

  • Выберите веб-распространение
  • Выберите свой ELB в раскрывающемся списке для Domain Name Domain. origin Path будет пустым, а Идентификатор Origin - это только идентификатор по вашему выбору.
  • Теперь в разделе "Параметры поведения кэша по умолчанию" выберите "Перенаправить HTTP-протокол HTTPS для политики протокола просмотра". Пожалуйста, внимательно изучите все остальные настройки и выберите, что подходит для вас. Они должны быть довольно простыми и понятными. (Пожалуйста, введите доменное имя test.xxxx.com для альтернативных доменных имен)
  • Нажмите, чтобы создать дистрибутив.
  • После создания дистрибутива перейдите к распределению и перейдите на вкладку поведения.
  • Здесь вы увидите, что уже есть запись по умолчанию. Перейдите в "Создать поведение", введите свой шаблон пути. поэтому, если ваш URL-адрес healthcheck test.xxxx.com/healthcheck, тогда ваш шаблон пути станет /healthcheck.
  • Выберите HTTP и HTTPS для политики протокола просмотра.
  • Наконец, в вашем маршруте53, пожалуйста, добавьте запись для своего домена и укажите ее только что созданному облачному распределению.

Так эффективно, что это делает, он перенаправляет перенаправление с tomcat и обрабатывается на уровне облачной инфраструктуры. Все запросы по умолчанию перенаправляются на HTTPS, а только для пути /healthcheck. HTTP-запросы разрешены. Перенаправление не нужно обрабатывать на более низких уровнях. Пожалуйста, дайте мне знать, если это сработает для вас. Кроме того, обратите внимание, что для маршрутизации route53 и cloudfront требуется время для распространения. поэтому, пожалуйста, подождите достаточно достаточно для успешного теста

Ответ 2

Поскольку у вас есть перенаправление HTTP-HTTPS, работающее в Tomcat, самым простым решением для вас будет рассмотрение перенаправления как допустимого ответа.

Вы не можете сделать это с помощью классического балансировщика балансировки нагрузки, но можете использовать новый Балансировщик нагрузки приложений.

Я предлагаю вам переключить балансировщик нагрузки на новый ALB и настроить проверку работоспособности, чтобы принять 200-399 в качестве здоровых кодов ответа.

Вы также получите другие преимущества, переключившись на новый Балансировщик нагрузки приложений, как это дешевле в час, и можете перенаправить на разные группы экземпляров на основе пути и имени хоста.

Ответ 3

Проверка исцеления ELB может быть настроена на использование конечной точки https, проверьте параметр: ping protocol http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html

Протокол Ping

Протокол, используемый для подключения к экземпляру.

Допустимые значения: TCP, HTTP, HTTPS и SSL

Консоль по умолчанию: HTTP

CLI/API по умолчанию: TCP

Вы также можете просто попробовать TCP в любом порту 80/443, и это вообще игнорирует перенаправления.