я использую certbot
--webroot
плагин и certbot renew
для обновления сертификата, который работает, но похоже httpd
кэширует сертификат и не «видит», что он обновлен.
Есть сигнал для httpd
перезагрузить сертификаты?
p.s. Я предпочитаю не перезапускать httpd
чтобы избежать простоев.
Получить httpd
чтобы заметить новые сертификаты, вам нужно запросить "плавный перезапуск". Из документов:
USR1 или изящный сигнал заставляет родительский процесс рекомендовать дочерним процессам выйти после их текущего запроса (или немедленно выйти, если они ничего не обслуживают). Родитель перечитывает свои файлы конфигурации и повторно открывает файлы журнала. Когда каждый дочерний элемент умирает, родитель заменяет его дочерним элементом из нового поколения конфигурации, который немедленно начинает обслуживать новые запросы.
Таким образом, плавный перезапуск не приведет к простоям.
Чтобы letsencrypt / certbot запускал плавный перезапуск, используйте --post-hook
аргумент. Этот аргумент запускает команду один раз, если была предпринята попытка обновления сертификата. Из документы:
Команда, запускаемая в оболочке после попытки получить / обновить сертификаты. Может использоваться для развертывания обновленных сертификатов или для перезапуска любых серверов, остановленных с помощью --pre-hook. Это запускается только в том случае, если была сделана попытка получить / обновить сертификат. (по умолчанию: нет)
Итак, вам нужна команда
certbot renew --post-hook "apachectl graceful"
или при запуске из задания cron
certbot renew --quiet --post-hook "apachectl graceful"
(Спасибо @RustyX за помощь с этим ответом)