Наш веб-сайт требует соответствия HIPAA, поэтому все должно быть зашифровано. Я не хочу, чтобы клиент получал сообщение об ошибке при вводе "http: //mysite.com ", поэтому мне нужно поддерживать как HTTP, так и HTTPS, а также перенаправлять HTTP на HTTPS. Я прав?
Я правильно сделал на веб-серверах. Поэтому, если я напрямую подключаюсь к веб-серверам, HTTP автоматически перенаправляется на HTTPS. Все хорошо.
Но веб-серверы находятся за балансировщиком нагрузки приложений AWS. Я не знаю, как перенаправить HTTP на HTTPS на ELB. Так клиентские браузеры все еще может подключиться к ELB через HTTP.
Как настроить HTTP => HTTPS на балансировщике нагрузки приложений AWS?
Другими словами, я уверен, что соединение между ELB и веб-серверами - HTTPS, но как сделать так, чтобы соединение между клиентскими браузерами и ELB было HTTPS?
По состоянию на июль 2018 г., это поддерживается балансировщиками нагрузки приложений.
HTTP:80
слушательRedirect
https
443
Original host, path, query
301 - Permanently moved
Изображение настроек прослушивателя HTTP to HTTPS на балансировщике нагрузки приложений AWS
Обычно происходит то, что 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, т.е. вы должны настроить свой веб-сервер, чтобы эта работа работала.
Вы можете добавить приведенную ниже конфигурацию в свой файл .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/