Как правильно настроить 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.