<p>Certbot配合cron可实现Nginx SSL证书自动续期:先安装certbot-nginx插件,再用sudo certbot --nginx申请证书并自动配置HTTPS,最后通过0 4 * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"设置每日续期任务。</p>

直接用 Certbot 配合系统定时任务(cron)就能实现 Nginx 的 SSL 证书定期自动续期,Nginx 本身不内置续期逻辑,但能无缝配合 Certbot 完成“申请→部署→重载”全流程。
确认 Certbot 已安装并支持 Nginx 插件
Certbot 必须以支持 Nginx 的方式安装,才能自动修改配置、重载服务。推荐使用官方包管理器安装:
- Ubuntu/Debian:
sudo apt install certbot python3-certbot-nginx - CentOS/RHEL 8+:
sudo dnf install certbot python3-certbot-nginx
装完后运行 certbot --nginx --help,能看到 nginx 相关参数,说明插件就绪。
首次申请并自动配置 HTTPS
一条命令完成验证、签发、Nginx 配置更新和 301 跳转设置:
sudo certbot --nginx -d example.com -d www.example.com- Certbot 会自动检测已有的 server 块,修改
ssl_certificate和ssl_certificate_key指向新证书路径 - 默认启用 HTTP → HTTPS 强制跳转,无需手动加 rewrite 规则
- 证书文件统一存放在
/etc/letsencrypt/live/example.com/下,软链接始终指向最新有效版本
配置自动续期(核心是 cron + certbot renew)
Certbot 自带的 renew 子命令专为定期续期设计,它会检查所有已申请证书的到期时间,仅对 30 天内将过期的执行更新:
- 先手动测试续期是否通畅:
sudo certbot renew --dry-run - 成功后添加系统级定时任务(建议每天凌晨 2–5 点间随机执行,避免 Let’s Encrypt 全网高峰):
- 运行
sudo crontab -e,加入一行:0 4 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx" -
--post-hook确保续期成功后立即重载 Nginx,使新证书生效;--quiet避免邮件轰炸
验证自动续期是否真正生效
别只看 cron 是否运行,关键要确认三件事都完成:
- 证书文件内容是否更新:对比
/etc/letsencrypt/live/example.com/fullchain.pem的有效期(用openssl x509 -in ... -text -noout | grep "Not After") - Nginx 配置中
ssl_certificate路径是否仍指向该位置(Certbot 不会改路径,只换文件内容) - 执行
nginx -t && systemctl reload nginx是否无报错——这是--post-hook在做的事
证书有效期只剩 30 天时才会触发 renew,所以不用等 90 天,可手动模拟:sudo certbot renew --force-renewal 测试全流程。


















