Certbot 如何在 Nginx 服务器上配置自动续签 Let's Encrypt 证书?

文章导读
最稳妥的方案是直接使用 Certbot 官方推荐的 Nginx 插件,它会在首次颁发证书时自动配置好系统级的定时任务,无需手动写 cron。
📋 目录
  1. 不同系统安装命令
  2. 首次发证与自动任务注册
  3. 验证自动续签状态
  4. 常见坑与排查
  5. 参考来源
A A

最稳妥的方案是直接使用 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 端口,并按提示输入邮箱同意服务条款。

Certbot 如何在 Nginx 服务器上配置自动续签 Let's Encrypt 证书?
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 即表示定时任务逻辑正常。

Certbot 如何在 Nginx 服务器上配置自动续签 Let's Encrypt 证书?
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/