Как перенаправить 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/


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, т. Е. Вы должны настроить свой веб-сервер, чтобы это работало.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.