У меня есть экземпляр EC2 с несколькими успешно развернутыми на нем приложениями, которые прослушивают соединения на портах 3000/3001/3002. Я могу правильно загрузить с него веб-страницу, подключившись к его общедоступному DNS или общедоступному IP-адресу на данном порту. Т.е. curl http://<ec2-ip-address>:3000
работает. Итак, я знаю, что приложения работают, и я знаю, что привязки портов / правила брандмауэра / группы безопасности EC2 настроены правильно для получения подключений из внешнего мира.
У меня также есть балансировщик нагрузки приложений, который должен направлять трафик в 3 приложения в зависимости от имени хоста, но он всегда дает мне «504 тайм-аут шлюза». Я проверил все настройки, но не вижу, что не так, и я не совсем уверен, как это исправить.
- ALB имеет один прослушиватель HTTPS / 443 с сертификатом, действительным для
mydomain.com
,app1.mydomain.com
,app2.mydomain.com
,app2.mydomain.com
. - The listener has 3 rules, plus the default rule:
- Host ==
app1.mydomain.com
=>app1-target-group
- Хост ==
app2.mydomain.com
=>app2-target-group
- Хост ==
app3.mydomain.com
=>app3-target-group
- Действие по умолчанию (последнее средство) =>
default-target-group
- Host ==
- Each target group contains only the single EC2 instance, over HTTP, with the following ports:
app1-target-group
: 3000app2-target-group
: 3001app3-target-group
: 3002default-target-group
: 3000
Учитывая, что я могу получить доступ к приложению напрямую, я уверен, что проблема в том, как я настроил группы ALB / listener / target. Но 504 не дает мне много возможностей для продолжения.
Я попытался включить журналы доступа к ведру S3, но похоже, что он ничего там не пишет. Есть единственный объект с именем ELBAccessLogTestFile
, а в корзине нет реальных журналов.
РЕДАКТИРОВАТЬ: Дополнительная информация ... У меня действительно установлен nginx на экземпляре EC2, где я ранее выполнял завершение SSL и сопоставление / маршрутизацию имени хоста и порта. Если я изменю default-target-group
выше, чтобы он указывал на порт 443 по HTTPS, то он работает!
Так почему-то маршрутизация трафика - от ALB к инстансу EC2 по HTTPS на порт 443 -> ОК! - от ALB к экземпляру EC2 через HTTP на порт 3000 -> Сломано!
Но опять же, я могу подключиться к экземпляру напрямую по HTTP / 3000 со своего ноутбука.