#docker #nginx #amazon-ec2 #devops #portforwarding
#docker #nginx ( nginx ) #amazon-ec2 #devops #перенос в будущее #nginx #перенаправление портов
Вопрос:
У меня есть 2 контейнера docker, запущенных на моем экземпляре EC2:
- Docker1: веб-сайт WordPress, работающий с PHP-сервером, подключенным к порту 8081 экземпляра EC2.
- 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.
- Я создал новую сеть docker ‘proxy-network’ (Примечание: вы можете обойтись без создания сети и просто прокси для localhost: 8081 и localhost: 8082. Это просто чище)
- Запустите все серверы приложений в этой сети с правильными именами (например: WordPress, angular). Используйте —name в команде run или conatiner_name в docker-compose.
- Запустите новый сервер 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;
}
}
Как только вы обновите записи псевдонимов в регистраторе домена, все будет просто замечательно. Надеюсь, это поможет. Удачи.