У меня проблемы с принудительным использованием HTTPS на сайте, который я развертываю через AWS Elastic Beanstalk.
Это интерфейсное приложение, использующее EmberJS. Я много дней ходил кругами, пытаясь понять, как перенаправить http-трафик на https. Я использую Amazon Linux AMI на моей машине EC2.
Я пришел к выводу (все еще не уверен, что это правильно), что не в Elastic Beanstalk я запускаю HTTPS. Я использую HTTP и HTTPS через балансировщик нагрузки Elastic Beanstalk и пытаюсь перенаправить на сервер.
Здесь я сталкиваюсь с проблемами. Я нахожу много ответов о правилах перезаписи, без mod_rewrite
которых они основаны на X-Forwarded-Proto
заголовке, но этот файл не существует на моей машине EC2 в соответствии с поиском поиска.
Я также попытался создать файл конфигурации в .ebextensions
каталоге, но это тоже не сработало.
Главное, что я пытаюсь сделать, - это чтобы пользователи обращались к https при попытке попасть на http-адрес. Любые указатели или предложения очень ценятся, спасибо!
РЕДАКТИРОВАТЬ: я использую 64-битный Debian jessie v1.4.1 под управлением Python 3.4 (Preconfigured - Docker)
источник
Ответы:
Я думаю, вам нужно указать, какую среду Elastic Beanstalk вы используете (см. Поддерживаемые платформы ), потому что разные среды имеют разную конфигурацию.
В основном вам нужно настроить:
Чтобы настроить его, вы можете использовать CLI или
.ebextensions
.Вы можете установить флажки Включить HTTPS и HTTP-Redirect на AWS Elastic Beanstalk . В нем рассказывается, как настроить Elastic Beanstalk Single Docker Container для обслуживания HTTPS и HTTP (перенаправление на HTTPS). Вы можете настроить конфиг как вам нужно.
источник
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
формате.ssl_certificate /opt/ssl/default-ssl.crt;
Когда я получаю информацию для сертификата, он дает мне «путь», но это просто «/»Это также можно сделать несколько проще, не касаясь балансировщика нагрузки, используя
X-Forwarded-Proto
заголовок, установленный ELB. Вот что я в итоге сделал:источник
Elastic Beanstalk не поддерживает несколько портов из одного контейнера Docker, поэтому вам нужно обрабатывать это на уровне прокси, как это предлагается. Однако вашему экземпляру EC2 не нужно знать о вашем сертификате, потому что вы можете разорвать соединение SSL с помощью балансировщика нагрузки.
В вашем
.ebextensions
каталоге создайте конфигурацию для прокси nginx, которая содержит две конфигурации сервера; тот, который проксиhttp://docker
(конфигурация по умолчанию, порт 80), и тот, который перенаправляет на https (я выбрал порт 8080)..ebextensions/01-nginx-proxy.config
:Создайте вторую конфигурацию для балансировщика нагрузки EB и групп безопасности, которые настраивают их следующим образом:
.ebextensions/02-load-balancer.config
:(Примечание: не забудьте заменить SSLCertificateId и VpcId вашими значениями).
Любой трафик через порт 80 подсистемы балансировки нагрузки (HTTP) будет попадать на порт 8080 в экземпляре EC2, который перенаправляет на HTTPS. Трафик через порт 443 на балансировщике нагрузки (HTTPS) будет обслуживаться портом 80 на экземпляре EC2, который является прокси-сервером док-станции.
источник
Я использую Terraform для включения перенаправления HTTP на HTTPS на ElasticBeanstalk,
Я просто добавил дополнительное правило слушателя
источник