最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 SSL 证书如何处理多张证书到期时间不一致时的分批更新
时间:2026-08-28 20:01:49 编辑:袖梨 来源:一聚教程网
多张证书到期时间不一致时,须按域名/证书粒度独立管理生命周期:每个域名使用独立证书目录(如 /etc/nginx/ssl/site-a.com/)和专属 Nginx server 块,通过 certbot renew --cert-name site-a.com 精准续期,配合 --deploy-hook 重载,并用 certbot certificates 查看各证到期时间以排期操作。
多张证书到期时间不一致时,不能统一“一刀切”续期或替换,否则容易误更新有效证书、触发 ACME 频率限制,甚至因路径冲突导致 Nginx 加载失败。关键在于按域名/证书独立管理生命周期,隔离操作,统一部署路径。
按证书粒度区分存储与配置
每个域名(或证书组)应有独立的证书目录和明确的 Nginx 配置块:
- 证书存放在不同子目录下,例如:
/etc/nginx/ssl/site-a.com/、/etc/nginx/ssl/api.example.net/,避免混放 - Nginx 的
server块中,ssl_certificate和ssl_certificate_key必须指向各自目录下的固定文件名(如fullchain.pem和privkey.pem),不共用同一组路径 - 不要把多个域名的证书硬塞进同一个 Certbot 申请命令(如
-d a.com -d b.com),除非它们本就属于同一张多域名证书且到期日一致
用 Certbot 单独续期指定证书
Certbot 支持按域名精准触发续期,跳过未到期证书:
- 执行
sudo certbot renew --cert-name site-a.com --dry-run测试单个证书续期流程是否通 - 生产环境使用
sudo certbot renew --cert-name site-a.com --deploy-hook "nginx -t && nginx -s reload",只影响该域名对应配置 - 查看当前所有证书及其到期时间:
sudo certbot certificates,输出含Expiry Date字段,便于排期
重载策略要避免全局干扰
多个证书分布在不同 server 块中,但 nginx -s reload 会整体加载全部配置。需确保:
- 每个
server块的证书路径真实存在、权限正确(Nginx 用户可读)、格式无误,否则 reload 会失败并回退到旧配置 - 若某证书尚未续期完成,其对应
server块仍引用旧路径——只要该路径下文件未被删除或覆盖,服务不受影响 - 不建议为每个证书单独 reload;应在确认目标证书已更新、路径已就位后再执行一次 reload,且提前用
nginx -t全局校验
高可用集群中的分批同步要点
当有多台 Nginx 节点时,分批更新必须带“节点+证书”双重维度控制:
- 先在一台节点上对
site-a.com执行续期 + reload,验证openssl s_client -connect site-a.com:443 -servername site-a.com | openssl x509 -noout -dates返回新有效期 - 确认无误后,再批量推送该证书文件到其余节点的对应目录(如
/etc/nginx/ssl/site-a.com/),并仅在这些节点执行 reload(不触发其他证书的变更) - 严禁用脚本一次性遍历所有节点、所有证书目录执行 renew —— Certbot 在非交互模式下可能跳过验证或静默失败