【问题标题】:Docker port forwarding on EC2 by domain name?通过域名在 EC2 上进行 Docker 端口转发?
【发布时间】:2020-12-18 13:45:40
【问题描述】:

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

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

我想在同一个端口 80 上为我的域和子域 xyz.com 和 portal.xyz.com 使用相同的 EC2 实例。

理想情况下,如果请求来自 xyz.com,它应该重定向到运行在 8081 上的 Docker1,如果它来自 portal.xyz.com,它应该重定向到运行在 8082 上的 Docker2。

是否可行,如果可行,如何实现?我不想为此生成 2 个 EC2 实例,并且都必须映射到端口 80 上的 HTTP。

【问题讨论】:

    标签: docker nginx amazon-ec2 devops portforwarding


    【解决方案1】:

    我在 VPS 服务器上做过类似的事情,从技术上讲,它也应该在 ec2 实例上工作。

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

    一旦您在域注册商中更新别名记录,它的作用就像一个魅力。希望能帮助到你。祝你好运。

    【讨论】:

      【解决方案2】:

      使用多个负载平衡器和目标组可以解决您的问题。 https://aws.amazon.com/about-aws/whats-new/2019/07/amazon-ecs-services-now-support-multiple-load-balancer-target-groups/

      您可以将两个负载均衡器设置为侦听 HTTP 并将您的一个 ECS 实例定位到不同的端口。之后,在 Route53 中设置路线就很简单了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-03
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        相关资源
        最近更新 更多