Docker 通过域名在 EC2 上进行端口转发?

Docker port forwarding on EC2 by domain name?

我的 EC2 实例上有 2 个 docker 容器 运行:

  1. Docker1: Wordpress 网站 运行 PHP 服务器映射到 EC2 实例的 8081 端口。
  2. 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 实例上工作。

  1. 我创建了一个新的 docker 网络 'proxy-network'(注意:您可以不创建网络而只代理 localhost:8081 和 localhost:8082。这更干净)
  2. 使用适当的名称(例如:wordpress,angular)启动该网络中的所有应用程序服务器。在 运行 命令中使用 --name 或在 docker-compose.
  3. 中使用 conatiner_name
  4. 启动一个新的 nginx 服务器映射主机端口 80 和 443(如果你需要 https 工作)。我使用了 nginx:latest 图片。创建了一个新的 default.conf 并替换了 container.
  5. 中的 /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;
  }
}

一旦您更新了域注册商中的别名记录,就会非常有效。希望能帮助到你。祝你好运。