Как правильно настроить HTTPS на AWS EC2?

У меня возникают проблемы при попытке запустить свой API, размещенный на AWS EC2, по протоколу HTTPS.

API работает нормально без настройки ELB, однако после попытки настройки (я выполняю рекомендуемые действия) я получаю сообщение 502 Bad Gateway.

Вот моя конфигурация:

  • AWS EC2 (t3a.small) запускает докер-контейнер моего приложения ExpressJS, прослушивающего порт 3000;
  • Группа безопасности с открытыми http:80 и https:443;
  • ACM, который охватывает следующие домены (mydomain.com, *.mydomain.com);
  • ELB прослушивает порты: http:80, https:443, https:3000;
  • Маршрут 53 с моей размещенной зоной, содержащей запись A-типа со значением ELB DNS;

Ранее URL

http://ec2-ip-address.zone.compute.amazonaws.com:3000/api/

Сейчас

https://api.mydomain.com:443/api/{resourceName}

Пожалуйста, я буду признателен за любую информацию о том, как правильно настроить, если я что-то пропустил, дайте мне знать.

1 ответ

Итак, с помощью @Marcin (см. Комментарии к моему вопросу) и других (форум Reddit) я смог заставить его работать должным образом.

Проблема заключалась в том, что ELB не мог связаться с моим экземпляром EC2 через порт 3000, поскольку этот порт не был настроен в моей группе безопасности.

Вам нужно создать ALB (Application Load Balancer) и SG с HTTP:80 и HTTPS:443, затем выберите свой экземпляр и настройте его для связи с ним через порт 3000 (или любой другой порт, на котором работает ваш EC2).

У вас должно быть две группы безопасности, одна назначена экземпляру EC2, а другая - ELB. Группа безопасности EC2 должна разрешать доступ из ELB sg на порт 3000. ELB sg должен разрешать доступ по всему миру через порты 80 и 443. ELB не должен прослушивать порт 3000 (в направлении мира), но должен иметь внутренний порт, установленный на 3000. Если все работает, вы должны увидеть ваш экземпляр EC2 как работоспособный в консоли ELB.

Кроме того, при проверке работоспособности не забудьте настроить его на прослушивание конечной точки, которая действительно что-то возвращает, например код состояния 200 OK, в противном случае AWS ELB будет предполагать, что у нее нет связи с экземпляром EC2.

Другие вопросы по тегам