如何通过HTTPS对外提供ECS(EC2部署)后端服务?
为ECS容器配置HTTPS的两种可行方案
方案一:使用AWS应用负载均衡(ALB)配置HTTPS(推荐)
这是ECS集群的标准实践,适配已创建的集群,步骤如下:
申请/导入SSL证书
- 进入AWS Certificate Manager(ACM)申请免费SSL证书,需覆盖你要使用的域名(无域名的话先在Route 53或其他服务商注册)。证书要和ECS集群处于同一区域,避免跨区域访问问题。
创建或配置ALB
- 若无ALB,在EC2控制台负载均衡器页面创建应用负载均衡器:
- 选择公网访问模式,设置与ECS集群EC2实例同VPC的子网。
- 安全组配置允许HTTPS(443端口)入站流量,同时开放ALB访问ECS实例容器端口的权限(比如你之前用的8080端口)。
- 已有ALB的话,直接编辑监听规则:
- 添加HTTPS监听(端口443),关联ACM中申请的证书。
- 设置转发规则,将HTTPS流量导向目标组。
- 若无ALB,在EC2控制台负载均衡器页面创建应用负载均衡器:
配置目标组
- 在EC2控制台目标组页面新建目标组,目标类型选实例(针对EC2启动类型的ECS集群),端口设为容器暴露的端口(如8080)。
- 将ECS集群内的EC2实例注册到该目标组,配置正确的健康检查规则(比如路径设为服务的健康检查端点
/health)。
更新ECS服务配置
- 进入ECS控制台,找到对应集群和服务并编辑:
- 在「网络」模块,将服务的负载均衡配置关联到新建的ALB和目标组。
- 确保服务安全组允许ALB安全组访问容器端口。
- 进入ECS控制台,找到对应集群和服务并编辑:
配置域名解析(可选但推荐)
- 若有域名,在Route 53或域名服务商处,将域名解析到ALB的DNS名称,实现
https://your-domain.com的访问方式。
- 若有域名,在Route 53或域名服务商处,将域名解析到ALB的DNS名称,实现
方案二:在EC2实例或容器内直接配置SSL证书
如果不想依赖ALB,也可在实例或容器层面配置HTTPS:
获取SSL证书
- 若用ACM证书,无法直接下载,可改用Let's Encrypt免费证书,通过
certbot工具申请获取证书文件。
- 若用ACM证书,无法直接下载,可改用Let's Encrypt免费证书,通过
在容器中配置HTTPS
- 修改Docker镜像,集成Nginx/Apache作为反向代理,配置SSL证书和443端口。比如Nginx配置示例:
server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://localhost:8080; # 转发到后端服务端口 } } - 重新构建镜像,更新ECS服务的容器定义,将容器443端口映射到EC2实例的443端口。
- 修改Docker镜像,集成Nginx/Apache作为反向代理,配置SSL证书和443端口。比如Nginx配置示例:
配置EC2安全组
- 开放EC2实例443端口的入站流量,确保外部可访问。
注意事项
- 优先选择ALB方案,它能自动管理证书续期、负载均衡和健康检查,契合AWS高可用架构。
- 若为Fargate启动类型的ECS集群,目标组类型选IP即可;EC2启动类型则选「实例」。
- 测试时可用
curl -v https://your-domain.com或浏览器访问,验证证书有效性和服务连通性。
内容的提问来源于stack exchange,提问作者AynonT
相关产品推荐
相关产品推荐

