如何在同一应用负载均衡器上将不同HTTPS子域名映射到不同ECS容器
解决方案
完全可以实现,你不需要创建额外的负载均衡器,通过AWS应用负载均衡器(ALB)的主机头路由规则即可完成单ALB多子域名HTTPS转发,Docker ECS集成原生支持该配置。
1. 前置准备
- 先在AWS Certificate Manager(ACM)中申请覆盖两个子域名的SSL证书(也可以分别申请两个证书),证书区域必须和你ECS集群的区域一致。
- 提前规划好两个服务对应的子域名,后续DNS解析需要指向ALB的公网地址。
2. 基于docker-compose.yml配置路由规则
Docker ECS集成提供了x-aws-lb-rules扩展字段,可以直接声明ALB的路由规则,无需手动修改AWS资源,示例配置如下:
version: '3.8' services: # 主应用服务,对应子域名 app.yourdomain.com app: image: 你的应用镜像地址:版本 ports: - "80:80" # 服务内部监听端口,ALB转发到目标组时用HTTP即可,HTTPS卸载在ALB层完成 x-aws-lb-rules: - host: app.yourdomain.com priority: 10 # 优先级数值越小越先匹配 action: forward deploy: replicas: 2 # 依赖Web服务,对应子域名 service.yourdomain.com dependent-web: image: 你的Web服务镜像地址:版本 ports: - "80:80" x-aws-lb-rules: - host: service.yourdomain.com priority: 20 action: forward # 统一配置ALB的HTTPS监听 x-aws-loadbalancer: type: application listeners: - port: 443 protocol: HTTPS certificates: - "arn:aws:acm:你的区域:你的AWS账号ID:certificate/你的ACM证书ID" # 替换为实际证书ARN default_action: type: fixed-response statusCode: 404 contentType: text/plain content: "Not Found"
3. 工作原理
- 上述配置会在现有ALB的443HTTPS监听下自动创建两条路由规则,基于请求头中的
Host字段匹配子域名,分别转发到两个服务对应的独立目标组,两者流量完全隔离。 - 单个ALB默认支持最多100条路由规则,足够覆盖多子域名的转发需求。
如果你不想修改docker-compose配置,也可以手动到AWS控制台操作:进入已创建的ALB的443监听配置,新增两条主机头匹配规则,分别对应两个子域名,转发到对应的ECS服务目标组即可。注意手动修改的配置如果后续重新用
docker compose up部署可能会被覆盖,建议优先通过配置文件声明规则。
4. 验证方式
部署完成后:
- 分别访问两个子域名的HTTPS地址,确认返回对应服务的内容
- 到AWS EC2控制台的负载均衡器页面,查看443监听下的路由规则是否已正确创建
内容的提问来源于stack exchange,提问作者Adair
相关产品推荐
相关产品推荐

