问题描述
我有2个在我的EC2实例上运行的dockers容器:
我想在相同的端口80上为我的域和子域xyz.com和portal.xyz.com使用相同的EC2实例。
理想情况下,如果请求来自xyz.com,则应将其重定向到运行在8081上的Docker1,如果请求来自portal.xyz.com,则应将其重定向到运行在8082上的Docker2。
可行吗?如果可以,怎么办?我不想为此生成2个EC2实例,并且都必须将其映射到端口80上的HTTP。
解决方法
使用多个负载均衡器和目标组可以解决您的问题。 https://aws.amazon.com/about-aws/whats-new/2019/07/amazon-ecs-services-now-support-multiple-load-balancer-target-groups/
您可以将两个负载均衡器设置为侦听HTTP,并将一个ECS实例定位到不同的端口。之后,在Route53中设置路由将很简单。
,我在VPS服务器上做过类似的事情,从技术上讲,它也应在ec2实例上工作。
- 我创建了一个新的docker网络“ proxy-network”(注意:您可以不创建网络而只代理localhost:8081和localhost:8082。这样做更干净)
- 使用适当的名称(例如:wordpress,angular)启动该网络中的所有应用程序服务器。在运行命令中使用--name或在docker-compose中使用conatiner_name。
- 启动一个新的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;
}
}
一旦您更新了域名注册机构中的别名记录,它就会像一个超级按钮。希望能帮助到你。祝你好运。