Перенаправление портов Docker на EC2 по имени домена?

#docker #nginx #amazon-ec2 #devops #portforwarding

#docker #nginx ( nginx ) #amazon-ec2 #devops #перенос в будущее #nginx #перенаправление портов

Вопрос:

У меня есть 2 контейнера docker, запущенных на моем экземпляре EC2:

  1. Docker1: веб-сайт WordPress, работающий с PHP-сервером, подключенным к порту 8081 экземпляра EC2.
  2. Docker2: портал, созданный при запуске Angular с NGINX, сопоставленным с портом 8082 экземпляра EC2.

Я хочу использовать один и тот же экземпляр EC2 для своего домена и поддомена xyz.com и portal.xyz.com на том же порту 80.

В идеале, если запрос поступает из xyz.com он должен перенаправлять на Docker1, работающий на 8081, и если он из portal.xyz.com он должен быть перенаправлен на Docker2, работающий на 8082.

Возможно ли это, и если да, то как? Я не хочу создавать для этого 2 экземпляра EC2, и оба должны быть сопоставлены с HTTP на порту 80.

Ответ №1:

Использование нескольких балансировщиков нагрузки и целевых групп может решить вашу проблему. https://aws.amazon.com/about-aws/whats-new/2019/07/amazon-ecs-services-now-support-multiple-load-balancer-target-groups/

Вы можете настроить оба балансировщика нагрузки для прослушивания HTTP и настроить таргетинг на один экземпляр ECS на разных портах. После этого настройка маршрутов в Route53 будет простой.

Ответ №2:

Я сделал нечто подобное на сервере VPS, технически это должно работать и на экземпляре ec2.

  1. Я создал новую сеть docker ‘proxy-network’ (Примечание: вы можете обойтись без создания сети и просто прокси для localhost: 8081 и localhost: 8082. Это просто чище)
  2. Запустите все серверы приложений в этой сети с правильными именами (например: WordPress, angular). Используйте —name в команде run или conatiner_name в docker-compose.
  3. Запустите новый сервер nginx, отображающий порты 80 и 443 хоста (если вам нужен https для работы). Я использовал nginx: последнее изображение. Создал новый файл default.conf и заменил /etc/nginx/conf.d/default.conf в контейнере.

Пример proxy.conf должен выглядеть так:

 server {
  listen        80;
  server_name   domain1.com www.domain1.com;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass  http://wordpress;
  }
}
server {
  listen        80 default_server;
  server_name   domain2.com www.domain2.com;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass  http://angular;
  }
}
  

Как только вы обновите записи псевдонимов в регистраторе домена, все будет просто замечательно. Надеюсь, это поможет. Удачи.