Amazon web services AWS ECS动态端口映射&x2B;nginx+;应用程序

Amazon web services AWS ECS动态端口映射&x2B;nginx+;应用程序,amazon-web-services,docker,nginx,amazon-ecs,Amazon Web Services,Docker,Nginx,Amazon Ecs,我有一个典型的ECS基础设施,在ALB后面有一个应用程序。我利用CD进程的动态主机映射(ECS可以在同一主机上部署新容器,而不会发生端口冲突) 现在我想在前面添加一个nginx容器(用于从ALB到EC2的SSL)。问题是,在nginx配置中,我必须使用端口指定应用程序端点。由于端口是动态分配的,我无法将此值硬编码到nginx config中。我应该如何处理这个问题?您可以使用docker容器。这允许您使用ECS中可配置的环境变量进行动态映射。我认为尝试访问此动态端口没有多大意义 目前,您只有一台

我有一个典型的ECS基础设施,在ALB后面有一个应用程序。我利用CD进程的动态主机映射(ECS可以在同一主机上部署新容器,而不会发生端口冲突)


现在我想在前面添加一个nginx容器(用于从ALB到EC2的SSL)。问题是,在nginx配置中,我必须使用端口指定应用程序端点。由于端口是动态分配的,我无法将此值硬编码到nginx config中。我应该如何处理这个问题?

您可以使用docker容器。这允许您使用ECS中可配置的环境变量进行动态映射。

我认为尝试访问此动态端口没有多大意义

目前,您只有一台nginx服务器在运行,因此您有一个应用程序负载平衡器,它将端口80上的传入流量定向到与您的web服务器容器对应的随机端口处的EC2实例

<ALB domain name>:80 -> <container EC2 instance IP>:<container dynamic port>
:80->:
但是如果您的服务正在扩展,您将有两个容器,运行在两个不同的端口上,可能运行在不同的EC2实例上

<ALB domain name>:80 -> <container EC2 instance IP>:<dynamic port>
                     -> <container2 EC2 instance IP>:<another dynamic port>
:80->:
-> :
您的ALB将轮流联系这些容器中的每一个

直接映射到其动态端口上的其中一个容器将由于绕过负载平衡器而失去其优势


因此,添加SSL的代理必须到达端口80上的负载平衡器本身的内部域名(或您在路由53中分配的域名)。

我想我的问题是如何查询动态端口?在task def中,我们只使用0作为主机端口。当我们遇到动态端口映射问题时,这个jwilder nginx代理实现提供了另一种方法,仍然可以将流量路由到相关容器。在这里,使用DNS名称在每个容器中定义虚拟主机环境变量,而不是依赖于动态映射的端口。然后您可以将DNS记录映射到ALB(ALB指向每个EC2主机实例中运行的多个Jwilder实例),并且它知道如何将它们转发到相关容器。它符合你的目的吗?谢谢,我会试试这个。说明看起来很简单,但我没有明白。我是否需要修改源代码并重建它,或者我可以只使用预构建的版本?说我有一个应用在主机上的5000上公开(使用VIRTUAL_host=app.domain.com),nginx代理容器如何知道代理哪个端口?你不需要构建它。所有映射都使用环境变量处理。