Как перенаправить HTTP на HTTPS на AWS Application Load Balancer?

12

Наш веб-сайт нуждается в соответствии HIPAA, поэтому все должно быть зашифровано. Я не хочу, чтобы клиент получал сообщение об ошибке, когда они помещали в « http : //mysite.com», поэтому мне нужно поддерживать HTTP и HTTPS и перенаправлять HTTP на HTTPS. Я прав?

Я сделал это правильно на веб-серверах. Поэтому, если я подключаюсь напрямую к веб-серверам, HTTP автоматически перенаправляется на HTTPS. Все хорошо.

Но веб-серверы находятся за AWS Application Load Balancer. Я не знаю, как перенаправить HTTP на HTTPS на ELB. Таким образом, клиентские браузеры все еще могут подключаться к ELB через HTTP.

Как настроить HTTP => HTTPS на балансировщике нагрузки приложений AWS?

Другими словами, я уверен, что соединение между ELB и веб-серверами является HTTPS, но как убедиться, что соединение между клиентскими браузерами и ELB является HTTPS?

Глупый чувак
источник
Вы не делаете это на LB. Вы делаете это на экземплярах, основываясь на X-Forwarded-Protoзаголовке, который посылает LB.
ceejayoz
Я не серверный человек - я программист на C #, поэтому, пожалуйста, извините меня за глупость - я использовал модуль перезаписи URL для настройки перенаправления на сервере Windows. Это работает, если я подключаюсь напрямую к серверу. Но если я подключусь к ELB, я все равно смогу подключиться через HTTP. Почему?
Глупый Чувак
ALB прослушивает 443 с SSL-сертификатом? Чтобы быть уверенным в своем вопросе, вы также хотите SSL между ALB и серверами?
strongjz

Ответы:

-4

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

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

Для подробного объяснения просим ознакомиться с официальной документацией с конца aws. https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

imvikasmunjal
источник
7
Этот ответ, похоже, касается HTTP-сервера Apache
Пол Дрейпер,
2
ОП спрашивает, как настроить ELB, чтобы вы объяснили, как настроить Apache? Они прямо сказали, что уже настроили Apache для перенаправления. Пожалуйста, удалите свой ответ.
Cerin
11

По состоянию на июль 2018 года это поддерживается балансировщиками нагрузки приложений.

  • Добавить / изменить HTTP:80слушателя
  • Установите действие на Redirect
  • протокол: https
  • порт: 443
  • установить следующий выпадающий список Original host, path, query
  • установить последний раскрывающийся список 301 - Permanently moved

Изображение настроек для прослушивателя HTTP-HTTPS в балансировщике нагрузки приложения AWS

Джон Папа
источник
1

Обычно происходит то, что ELB настроен на прием https (порт 443) и пересылку на экземпляр EC2 (цель балансировщика нагрузки) по http (порт 80).

Базовый веб-сервер перенаправляет эти запросы на порт 443 на балансировщике нагрузки, вызывая бесконечный цикл перенаправления (между балансировщиком нагрузки и внутренним веб-сервером).

Распространенное сообщение об ошибке ERR_TOO_MANY_REDIRECTS.

Решение состоит в том, чтобы взглянуть на X-Forwarded-Proto, который является протоколом, который видит балансировщик нагрузки, при принятии решения о перенаправлении.

Для nginx конфиг будет выглядеть так:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

и для apache .htaccess что-то вроде этого:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

ПРИМЕЧАНИЕ. Хотя можно подумать, что было бы удобно, если бы это можно было обрабатывать без перенастройки веб-сервера, с весны 2018 года нет способа решить эту проблему, используя только ELB, т. Е. Вы должны настроить свой веб-сервер, чтобы это работало.

Сандстр
источник