У меня есть две среды Elastic Beanstalk с одним экземпляром на основе Docker (одна для подготовки и одна для производства).
Я хотел бы перенести приложение (Elastic Beanstalk), чтобы оно располагалось за балансировщиком нагрузки (главным образом, чтобы воспользоваться преимуществами Диспетчер сертификатов AWS).
В настоящее время я использую .ebextensions чтобы настроить конфигурацию Nginx в соответствии с требованиями маршрутизации трафика моего приложения:
- Для пути
/xyz/
, трафик должен идти в приложение через порт 80 (т. е. HTTP)
- Для всех других запросов к порту 80 должен быть отправлен ответ перенаправления (301) на порт 443 (HTTPS).
- Все запросы на порт 443 (HTTPS) должны проходить через приложение.
Итак, мой вопрос: как выполнить эти требования к маршрутизации с помощью балансировщика нагрузки перед одной из моих сред Elastic Beanstalk? Я думаю иметь один балансировщик нагрузки для каждой среды ради гибкости.
Я столкнулся со следующими возможными решениями (ни одно из которых не кажется идеальным):
- Настройте новую среду Elastic Beanstalk с выделенным Балансировщик нагрузки приложений а затем изменить прослушиватели и правила балансировщика нагрузки через службу консоли EC2 (аналогично тому, что это Запись документации Elastic Beanstalk, по-видимому, предлагает в разделе «Перенаправить HTTP-трафик на HTTPS> Настроить балансировщик нагрузки»).
- Настройте новый Application Load Balancer через службу консоли EC2, создайте новую среду Elastic Beanstalk, подключенную к новому Application Load Balancer в качестве Общий балансировщик нагрузки приложений а затем следуйте этим инструкциям (это и это), чтобы (надеюсь?) обеспечить синхронизацию балансировщика нагрузки и среды Elastic Beanstalk (с точки зрения управления экземплярами и маршрутизации трафика).
- Настройте новую среду Elastic Beanstalk с выделенным Application Load Balancer, а затем измените приложение, чтобы оно прослушивало три порта (один для
/xyz/
трафика, один для перенаправления HTTP -> HTTPS и один для трафика HTTPS), который документируется здесь кажется, говорит мне делать (но не упоминает, как добиться нескольких прослушивающих портов в одном приложении).
Варианты один и два включают в себя использование «задней» Elastic Beanstalk для изменения базовых ресурсов (что я не решаюсь делать), а третий вариант потребует от меня изменения моего приложения (чего я хотел бы попытаться избежать).
Рекомендуется ли какой-либо из этих вариантов?
Есть ли лучший вариант?