如何使用Docker与AWS将多服务部署到子域名,实现Django多版本站点按子域名访问
实现方案
首先明确:不需要为两个服务单独配置负载均衡器,通过AWS应用负载均衡器(ALB)自带的基于主机头的路由规则,即可实现单个ALB匹配不同子域名、转发请求到对应后端服务,成本更低且维护更简单。
调整Docker Compose配置
你需要在原有配置基础上补充负载均衡的路由规则,修改后的示例配置如下:
x-common-variables: &vars .... # 配置全局ALB x-aws-loadbalancer: name: web-alb scheme: internet-facing services: web-prod: image: foo/bar:prod command: python manage.py runserver 0.0.0.0:80 environment: *vars # 补充LB规则:匹配www.mydomain.com的请求转发到该服务80端口 ports: - target: 80 x-aws-protocol: http x-aws-host: www.mydomain.com web-latest: image: foo/bar:latest command: python manage.py runserver 0.0.0.0:8080 environment: *vars # 补充LB规则:匹配preview.mydomain.com的请求转发到该服务8080端口 ports: - target: 8080 x-aws-protocol: http x-aws-host: preview.mydomain.com
配置Route 53解析
在Route 53的托管zone中添加两条别名A记录,均指向上述配置生成的同一个ALB公网地址:
www.mydomain.com别名记录指向ALB公网域名preview.mydomain.com别名记录指向同一个ALB公网域名
可选方案:独立负载均衡器配置
如果你的场景需要生产和预览环境的负载均衡完全隔离(比如权限管控、带宽资源独立),也可以为两个服务分别配置独立负载均衡器,只需在每个服务的ports配置下单独声明LB属性即可,该方案会产生两份LB的资源费用,普通场景不推荐使用。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

