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

如何为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系统为例,其他系统可调整对应命令):

  1. 编写用户数据脚本:
#!/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
  1. 配置到ASG启动模板:
    • 进入AWS EC2控制台,找到ASG对应的启动模板(或启动配置)。
    • 编辑启动模板,在「高级详情」的「用户数据」中粘贴上述脚本,替换域名、邮箱、API端口等变量。
    • 保存模板并更新ASG使用最新版本的启动模板。

三、自定义AMI优化方案(可选)

若用户数据脚本执行耗时过长,可预先制作包含certbot、Web服务器配置及自动续期任务的自定义AMI:

  1. 启动临时EC2实例,手动执行上述脚本的安装和配置步骤。
  2. 测试证书获取、自动续期功能正常后,停止实例并创建自定义AMI。
  3. 更新ASG启动模板,使用该自定义AMI作为基础镜像。
  4. 注意:后续若需调整证书续期逻辑,需重新制作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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:10:26