我正在使用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 对此答案的帮助)