Certbot可全自动完成Let's Encrypt证书的验证、换证及Nginx重载,关键在于首次使用--nginx参数申请证书并验证certbot renew --dry-run成功,后续依赖默认systemd timer或cron每日检查,距过期30天内自动续签。

Let's Encrypt 证书只有90天有效期,靠手动续期迟早出问题。Certbot 能全自动完成验证、换证、重载 Nginx 配置,关键在于配置一次、长期有效——不需要改 DNS,也不依赖外部 API。
确保基础环境就绪
先确认 Nginx 正常运行且端口开放:
- 执行 nginx -t && systemctl is-active nginx,输出应为 success 和 active
- 检查 80 和 443 端口是否放行:ss -tuln | grep -E ':80|:443'
- 域名必须已解析到该服务器 IP,且能被公网访问(Let’s Encrypt 验证服务器会主动请求)
用 HTTP-01 验证方式申请首张证书
这是自动化续期最稳的起点。Certbot 会自动修改 Nginx 配置,但前提是它能写入配置文件并重载服务。
- 运行 sudo certbot --nginx -d example.com -d www.example.com(替换为你的真实域名)
- 按提示输入邮箱、同意协议、选择是否强制 HTTPS(建议选 2,自动加 301 跳转)
- 成功后,Certbot 会更新 Nginx 配置,添加
ssl_certificate和ssl_certificate_key指令,并启用 TLS 1.2+ 支持
验证并启用自动续期机制
Certbot 安装时通常已配置好 systemd timer(Ubuntu/Debian)或 cron(CentOS/RHEL),但必须手动验证是否生效。
- 测试续期流程:sudo certbot renew --dry-run,看到 **Congratulations, all simulated renewals succeeded** 才算通过
- 查看定时任务:Ubuntu 运行 systemctl list-timers | grep certbot;CentOS 查看 crontab -l | grep certbot
- 默认策略是每天凌晨随机时间检查,距过期少于 30 天才真正续签,避免频繁调用
Nginx 配置需注意的细节
自动续期不是“设完就不管”,Nginx 配置稍有疏漏就会导致续期失败或证书不生效。
- 确保站点监听 80 端口的 server 块中包含 ACME 验证路径:
location ^~ /.well-known/acme-challenge/ { root /var/www/html; } - 不要在 HTTPS server 块里重复定义该 location,否则 HTTP 验证阶段无法响应
- 证书文件路径必须与 Certbot 写入的一致(默认在 /etc/letsencrypt/live/example.com/),且 Nginx 用户(如 www-data 或 nginx)有读取权限











