Docker 通过域名在 EC2 上进行端口转发?
Docker port forwarding on EC2 by domain name?
我的 EC2 实例上有 2 个 docker 容器 运行:
- Docker1: Wordpress 网站 运行 PHP 服务器映射到 EC2 实例的 8081 端口。
- Docker2:在 Angular 运行 上创建的门户映射到 EC2 实例的端口 8082。
我想为我的域和子域 xyz.com 以及门户使用相同的 EC2 实例。xyz.com 在相同的端口 80 上。
理想情况下,如果请求来自 xyz.com,它应该重定向到 8081 上的 Docker1 运行,如果它来自 portal.xyz.com,它应该重定向到 Docker2 运行 在 8082 上。
是否可行,如果可行,如何实现?我不想为此生成 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:latest 图片。创建了一个新的 default.conf 并替换了 container.
中的 /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;
}
}
一旦您更新了域注册商中的别名记录,就会非常有效。希望能帮助到你。祝你好运。
我的 EC2 实例上有 2 个 docker 容器 运行:
- Docker1: Wordpress 网站 运行 PHP 服务器映射到 EC2 实例的 8081 端口。
- Docker2:在 Angular 运行 上创建的门户映射到 EC2 实例的端口 8082。
我想为我的域和子域 xyz.com 以及门户使用相同的 EC2 实例。xyz.com 在相同的端口 80 上。
理想情况下,如果请求来自 xyz.com,它应该重定向到 8081 上的 Docker1 运行,如果它来自 portal.xyz.com,它应该重定向到 Docker2 运行 在 8082 上。
是否可行,如果可行,如何实现?我不想为此生成 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:latest 图片。创建了一个新的 default.conf 并替换了 container. 中的 /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;
}
}
一旦您更新了域注册商中的别名记录,就会非常有效。希望能帮助到你。祝你好运。