如何为AWS自动扩缩容组配置带自动续期的免费SSL证书
针对AWS自动扩缩容组配置自动续期Let's Encrypt SSL证书的分步指南
一、前置条件确认
- 确认API服务器自动扩缩容组(ASG)所在VPC具备公网访问能力(或通过NAT网关访问公网),保证实例能连接Let's Encrypt服务器。
- 安全组开放80端口(用于Let's Encrypt的HTTP-01验证)和443端口(API服务的HTTPS访问)。
- 已拥有API服务器的域名,且域名解析指向ASG关联的负载均衡器(推荐方案)或实例的公有IP/弹性IP。
二、通过实例用户数据实现证书自动部署
ASG启动新实例时会执行用户数据脚本,我们可以在此集成certbot安装、证书获取及自动续期逻辑(以Ubuntu系统为例,其他系统可调整对应命令):
- 编写用户数据脚本:
#!/bin/bash # 更新系统包 apt update && apt upgrade -y # 安装certbot和nginx(若API用其他Web服务器,替换为对应包,如apache2) apt install -y certbot python3-certbot-nginx # 停止nginx避免占用80端口 systemctl stop nginx # 获取Let's Encrypt证书,替换为你的域名和邮箱 certbot certonly --standalone -d your-api-domain.com --email your-email@example.com --agree-tos --non-interactive # 配置nginx指向证书(根据你的API服务端口调整代理地址) cat > /etc/nginx/sites-available/api-server << EOF server { listen 443 ssl; server_name your-api-domain.com; ssl_certificate /etc/letsencrypt/live/your-api-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-api-domain.com/privkey.pem; location / { proxy_pass http://localhost:8080; # 替换为你的API服务端口 proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; } } server { listen 80; server_name your-api-domain.com; return 301 https://\$host\$request_uri; } EOF # 启用站点并重启nginx ln -s /etc/nginx/sites-available/api-server /etc/nginx/sites-enabled/ systemctl start nginx # 添加自动续期定时任务 echo "0 3 * * * root certbot renew --quiet --renew-hook 'systemctl reload nginx'" >> /etc/crontab
- 配置到ASG启动模板:
- 进入AWS EC2控制台,找到ASG对应的启动模板(或启动配置)。
- 编辑启动模板,在「高级详情」的「用户数据」中粘贴上述脚本,替换域名、邮箱、API端口等变量。
- 保存模板并更新ASG使用最新版本的启动模板。
三、自定义AMI优化方案(可选)
若用户数据脚本执行耗时过长,可预先制作包含certbot、Web服务器配置及自动续期任务的自定义AMI:
- 启动临时EC2实例,手动执行上述脚本的安装和配置步骤。
- 测试证书获取、自动续期功能正常后,停止实例并创建自定义AMI。
- 更新ASG启动模板,使用该自定义AMI作为基础镜像。
- 注意:后续若需调整证书续期逻辑,需重新制作AMI。
四、验证配置效果
- 手动触发ASG启动新实例,初始化完成后访问
https://your-api-domain.com,确认证书有效。 - 查看实例日志
/var/log/letsencrypt/letsencrypt.log,确认证书获取过程无错误。 - 检查定时任务配置:执行
cat /etc/crontab | grep certbot,确认自动续期任务已添加。
五、注意事项
- 若无法开放80端口,可改用DNS-01验证模式:需安装对应域名服务商的certbot插件(如
certbot-dns-cloudflare),并配置API密钥让certbot自动添加DNS验证记录。 - 私有子网内的实例需配置NAT网关,确保能访问公网获取证书。
- certbot会自动检测证书有效期(剩余30天内触发续期),续期后通过
--renew-hook重载Web服务器应用新证书。
内容的提问来源于stack exchange,提问作者Hassan Baig
相关产品推荐
相关产品推荐

