最稳妥的方案是直接使用 Certbot 官方推荐的 Nginx 插件,它会在首次颁发证书时自动配置好系统级的定时任务,无需手动写 cron。
先说结论:Certbot 安装完成后会自动注册 renewal 任务,重点在于确认定时服务是否存活。
- 适合:使用 Ubuntu、Debian、CentOS 等主流 Linux 发行版的 Nginx 环境
- 先准备:确保域名解析已指向服务器,且 80/443 端口未被防火墙拦截
- 验收:执行干运行命令确认续签逻辑无误,并检查系统定时任务状态
- 风险提示:只有首次成功获取证书后,自动续签任务才会被创建
不同系统安装命令
不同 Linux 发行版的包管理工具不同,请根据系统选择对应命令。package 管理器安装通常会自动注册 systemd timer。
Ubuntu / Debian:
sudo apt update
sudo apt install certbot python3-certbot-nginx
CentOS / RHEL:
需先启用 EPEL 源,否则可能找不到包。
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y
首次发证与自动任务注册
执行首次发证命令。使用 `--nginx` 参数可以让 Certbot 自动修改 Nginx 配置监听 443 端口,并按提示输入邮箱同意服务条款。
sudo certbot `--nginx` -d example.com
关键注意:自动续签任务依赖于首次发证成功。如果此步骤报错或中断,Certbot 不会创建定时任务,后续需手动排查发证错误后重新运行。
验证自动续签状态
安装完成后,建议立即验证自动续签机制是否正常工作。
1. 检查定时任务状态
现代 Linux 发行版通常使用 systemd timer。执行以下命令确认服务处于 active 状态:
sudo systemctl status certbot.timer
若显示 active (waiting) 或 active (running) 即表示正常。部分旧系统可能使用 cron,可通过 sudo crontab -l 查看是否有 certbot 相关任务。
2. 模拟续签测试
使用 `--dry-run` 参数模拟续签过程,这不会消耗真实的续签次数配额。命令执行成功且显示 Congratulations 即表示定时任务逻辑正常。
sudo certbot renew `--dry-run`
3. 查看续签日志
若遇到续签失败,可通过日志排查具体原因:
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
常见坑与排查
1. 防火墙拦截:续签时需要验证 80 端口或 443 端口可达,如果服务器防火墙限制了外部访问,续签会失败。
2. Nginx 配置冲突:如果手动修改了 Nginx 配置文件且语法有误,Certbot 在续签后重载 Nginx 时会失败,导致新证书无法生效。建议在修改配置后执行 nginx -t 测试语法。
3. 配额限制:Let's Encrypt 对同一域名每周的续签次数有限制,频繁测试 `--dry-run` 是安全的,但不要频繁执行真实续签。
4. 首次发证失败遗留问题:若首次发证失败,后续直接运行 renew 可能无效。需解决发证错误后,重新运行首次发证命令以重建定时任务。
参考来源
- Certbot Official Documentation, User Guide, https://certbot.eff.org/
- Let's Encrypt, Certificate Lifetime, https://letsencrypt.org/