You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Nginx容器调用ECS Fargate应用容器及配置疑问

ECS跨Task容器访问配置指南

核心配置与疑问解答

1. 应用容器的可见性与子网选择

  • 必须将应用容器部署在私有子网,私有子网默认无公网出口(无需给应用Task分配公网IP),仅同VPC内的资源(如公有子网的Nginx容器)可访问它,实现仅对Nginx可见的需求。
  • 确保Nginx的公有子网与应用的私有子网属于同一VPC,同时配置安全组规则:允许Nginx所在安全组访问应用容器的9000端口。

2. 应用容器的端口配置

  • 不需要映射主机端口(hostPort设为0或留空),仅需在Task Definition的容器定义中配置containerPort: 9000,开放容器内部的9000端口即可。ECS Task在同VPC内可直接通过容器内网IP访问该端口,无需主机端口映射。

3. 服务发现与调用方式

  • 不能用localhost:9000调用:两个容器属于独立Task,不在同一网络命名空间,localhost仅指向当前容器自身。
  • 单Task多容器场景可直接用容器名称,但你是独立Task,必须用Cloud Map服务发现(避免依赖动态变化的内网IP):
    • 给应用容器创建ECS服务时开启Cloud Map,指定私有命名空间(如myapp.internal)和服务名称(如app-service)。
    • Nginx的proxy_pass需改为对应服务发现域名,例如http://app-service.myapp.internal:9000;。
  • 调用时不能直接用Task Definition中的容器名称,必须用Cloud Map生成的服务域名或应用Task的内网IP(不推荐后者,IP会随Task重启变化)。

4. 解决Nginx无法访问的具体步骤

  1. 配置应用Task Definition
    • 容器定义中设置containerPort: 9000,hostPort设为0;网络模式选择awsvpc(每个Task获得独立内网IP,支持VPC内网络访问)。
  2. 部署应用到私有子网
    • 创建ECS服务,选择私有子网,不分配公网IP;开启Cloud Map,创建私有命名空间,服务名称设为app,端口指定9000。
  3. 配置Nginx
    • 在Nginx配置中将proxy_pass修改为http://app.myapp.internal:9000;(对应你的Cloud Map命名空间和服务名)。
    • Nginx服务部署在公有子网,分配公网IP,安全组允许外部访问80/443端口。
  4. 安全组规则配置
    • 应用容器安全组:允许来自Nginx安全组的9000端口入站访问。
    • Nginx安全组:允许外部80/443端口入站,同时允许出站访问应用的9000端口。

内容的提问来源于stack exchange,提问作者Sasquatch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:00:45