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

问题描述

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

  1. Docker1:wordpress服务器上运行的PHP服务器已映射到EC2实例的端口8081。
  2. Docker2:在Angular上创建的门户网站,Nginx映射到EC2实例的端口8082。

我想在相同的端口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实例上工作。

  1. 我创建了一个新的docker网络“ proxy-network”(注意:您可以不创建网络而只代理localhost:8081和localhost:8082。这样做更干净)
  2. 使用适当的名称(例如:wordpress,angular)启动该网络中的所有应用程序服务器。在运行命令中使用--name或在docker-compose中使用conatiner_name。
  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;
  }
}

一旦您更新了域名注册机构中的别名记录,它就会像一个超级按钮。希望能帮助到你。祝你好运。