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

ECS任务多端口配置问题:单目标组暴露双端口并通过负载均衡路由

解决ECS任务多端口通过负载均衡器路由的问题

单个ECS目标组只能绑定一个端口,没法在同一个目标组里注册两个不同端口的任务实例。以下是两种可行的解决方案:

方案一:使用两个目标组分别路由

这是最直接的分流方案,利用负载均衡器的监听规则区分流量:

  • 在ECS任务定义里配置两个端口映射:将容器的3000端口映射到对应网络端口,4001端口同理完成映射
  • 创建两个目标组:
    • 目标组A:端口设为3000,目标类型选IP(awsvpc模式)或实例(bridge模式)
    • 目标组B:端口设为4001,目标类型与A保持一致
  • 在负载均衡器上配置监听规则:
    • 针对HTTP 80端口,添加规则:路径匹配/api/*时转发到目标组A
    • 另一条规则:路径匹配/ws/*时转发到目标组B
    • 也可通过域名分流:api.yourdomain.com转发到目标组A,ws.yourdomain.com转发到目标组B
  • 更新ECS服务,将两个目标组关联到服务中,任务启动后会自动注册到这两个目标组

方案二:用反向代理统一入口

如果希望只用一个端口对外暴露,可在ECS任务内添加反向代理(如Nginx),将单端口流量转发到内部两个服务:

  • 修改ECS任务定义,添加Nginx容器(或在应用容器中安装Nginx),配置端口映射:将Nginx的80端口对外暴露
  • 编写Nginx配置文件实现路径转发:
server {
    listen 80;

    # 转发REST API请求到3000端口
    location /api {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 转发WebSocket请求到4001端口,需配置WebSocket专属头
    location /ws {
        proxy_pass http://localhost:4001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  • 创建一个目标组,端口设为80,关联到负载均衡器的80端口监听,所有流量先到Nginx,再由Nginx内部转发至对应服务

注意事项

  • 若使用awsvpc网络模式,目标组必须选择IP类型,ECS会自动将任务的ENI IP注册到目标组
  • WebSocket转发必须配置Upgrade和Connection头,否则无法维持长连接
  • 使用反向代理时,需确保Nginx容器与应用容器在同一任务内,可通过localhost互相访问端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:08