在 Apache httpd 上更新 letsencrypt 证书

在 Apache httpd 上更新 letsencrypt 证书

我正在使用certbot --webroot插件并certbot renew更新证书,它确实有效,但它看起来httpd正在缓存证书并且没有“看到”它已被更新。

httpd是否有重新加载证书的信号?

ps 我宁愿不重新启动httpd以避免停机。

答案1

httpd注意到新的证书,您需要请求它执行“优雅重启“。来自文档:

USR1 或优雅信号会导致父进程建议子进程在当前请求之后退出(如果子进程没有提供任何服务,则立即退出)。父进程重新读取其配置文件并重新打开其日志文件。当每个子进程死亡时,父进程会用新一代配置中的子进程替换它,该子进程会立即开始处理新请求。

因此,平稳重启不会导致停机。

为了让 letsencrypt/certbot 触发优雅重启,请使用参数--post-hook。如果尝试任何证书续订,此参数将运行一次命令。从文档

尝试获取/更新证书后在 shell 中运行的命令。可用于部署更新的证书,或重新启动任何被 --pre-hook 停止的服务器。仅当尝试获取/更新证书时才会运行此命令。(默认值:无)

因此你需要的命令是

certbot renew --post-hook "apachectl graceful"

或者从 cron 任务运行

certbot renew --quiet --post-hook "apachectl graceful"

(感谢@RustyX 对此答案的帮助)

相关内容