Назад | Перейти на главную страницу

Перенаправить эфемерный порт на 80

Я начинаю с AWS и управления серверами в целом и просто настраиваю конвейер развертывания с ECS и некоторыми контейнерами.

Мой контейнер:

Пока я читаю документацию по сопоставлению портов и балансировке нагрузки, я не могу понять, как я могу получить этот порт автоматически и направить его на порт 80. В основном я хочу получить доступ к моему веб-сайту без указания порта в URL-адресе.

Я знаю, что могу найти там диапазон портов по умолчанию: / proc / sys / net / ipv4 / ip_local_port_range

Где я застрял сейчас:

1 - Как можно сопоставить выбранный эфемерный порт с портом HTTP-трафика по умолчанию (80)

2 - Как я могу убедиться, что если порт уже используется, я по-прежнему выбираю правильный порт в диапазоне эфемерных портов, чтобы этот можно было сопоставить с 80.

Вы можете проверить, какая служба работает на каждом порту, с помощью:

  • lsof -i: порт -S
  • netstat -a | grep порт

Что касается основной части вашего вопроса, я бы использовал nginx. Вы можете запустить angular на localhost: someport и проксировать свой site.com:80 на localhost.

Это может затруднить понимание того, что на самом деле здесь необходимо рассмотреть три порта:

  1. Внешний порт Application Load Balancer (ALB) - слушателя
  2. Порт хоста экземпляров EC2, работающих в кластере ECS.
  3. Порт контейнера приложения, работающего внутри вашего контейнера.

Волшебство происходит, когда вы указываете «порт хоста» равным 0, это инструкция для ECS, чтобы запустить контейнер со случайным эфемерным портом, открытым на экземпляре хоста EC2 ECS. Это позволяет (например) запускать два экземпляра одного и того же контейнера в одном экземпляре EC2. Вам действительно не нужно понимать, какой порт используется (кроме, возможно, диагностики), поскольку ECS / ALB позаботится о его динамическом сопоставлении - за исключением того, что вам нужно убедиться, что группа безопасности ваших экземпляров ECS разрешает все диапазоны эфемерных портов от ALB - иначе трафик от ALB к приложению не пройдет.

Внутренний порт контейнера 4200 может быть одинаковым для каждого экземпляра контейнера, поскольку он виден только внутри самого контейнера.

Затем, чтобы ваше приложение использовало порт 80 - чтобы это было беспрепятственно для ваших пользователей - это порт слушателя ALB, который должен быть портом 80, так как это ALB, к которому ваши пользователи будут подключаться, т. Е. http://yourapplication.com/ CNAME для DNS-имени ALB.

Более подробную информацию о настройке можно найти здесь:

Как настроить динамическое сопоставление портов для Amazon ECS?

И тут:

Динамическое сопоставление портов в ECS с помощью Application Load Balancer

Наконец, хотя ваша цель - экспортировать порт 80, я настоятельно рекомендую использовать HTTPS на 443 в балансировщике нагрузки, поскольку вы можете получить сертификат для ALB бесплатно от AWS. Любые сервисы, представленные сегодня, действительно должны использовать TLS (SSL), где это возможно.

Конечно, если вы хотите, чтобы ваши пользователи по-прежнему имели доступ через HTTP и перенаправляли их - к счастью, с прошлого месяца вы можете теперь использовать действие перенаправления на ALB, чтобы сделать это изначально в ALB, прикрепив правило перенаправления к прослушивателю порта 80. Подробнее здесь:

Слушатели для балансировщиков нагрузки вашего приложения