Certbot证书更新成功但站点不安全,如何避免每次更新都重启Nginx
解决Certbot证书更新后需手动重启Nginx的问题
问题根因
Certbot自动更新证书文件后,Nginx不会主动加载新的证书文件,仍会沿用旧证书的文件句柄提供服务,因此浏览器会识别到证书未更新、显示站点不安全,只有重启/重载Nginx后才会加载新证书。
配置方法
通过配置Certbot的自动部署钩子,即可实现证书更新后自动触发Nginx平滑重载,无需手动操作:
全局配置(适用于所有证书均由Nginx托管的场景)
编辑Certbot全局配置文件/etc/letsencrypt/cli.ini,在文件末尾添加以下配置:
deploy-hook = systemctl reload nginx
单证书配置(仅针对特定域名证书生效)
编辑对应域名的证书更新配置文件/etc/letsencrypt/renewal/xyz.com.conf,在[renewalparams]配置块下添加以下内容:
deploy_hook = systemctl reload nginx
验证配置是否生效
执行模拟证书更新命令,验证钩子是否能正常执行:
sudo certbot renew --dry-run
如果命令执行过程中没有报错,且输出显示会触发Nginx重载操作,说明配置正常。
注意事项
- 优先使用
systemctl reload nginx而非restart,reload属于平滑重载,不会中断现有用户连接,更适合生产环境使用 - Ubuntu 18.04下Certbot默认会配置自动更新的定时任务,你可以通过
systemctl list-timers certbot.timer命令确认定时任务是否正常运行 - 配置的钩子命令默认由root用户执行,无需额外调整权限
内容的提问来源于stack exchange,提问作者Krithika
相关产品推荐
相关产品推荐

