Автоматический рестарт nginx после обновления сертификата Let’s Encrypt

Немного нетипичная схема — на одном хосте используется и Apache, и nginx. Apache работает на 80 и 443 портах, nginx обслуживает mail proxy на почтовых портах. Следовательно за общение с сервисом Let’s Encrypt через 80 порт отвечает Apache и в файле, относящемся к продлению сертификата для домена, /etc/letsencrypt/renewal/domain.name.ru.conf в секции [renewalparams] указан apache:

authenticator = apache
installer = apache

Соответственно после процедуры обновления сертификата certbot перезагружает Apache, а не nginx. Но данный сертификат и домен используется nginx. Сообщить nginx о смене сертификатов (перечитать конфигурацию) можно несколькими способами:

nginx -t && nginx -s reload
Послать SIGHUP
systemctl reload nginx

Буду использовать systemctl reload nginx.

Для автоматического вызова указанной выше команды можно написать скрипт и разместить в /etc/letsencrypt/renewal-hooks/post/ тогда certbot будет выполнять его каждый раз в момент завершения процедуры продления сертификатов.

Но тогда nginx будет перечитывать конфигурацию каждый раз при продлении любых сертификатов, даже не относящихся к доменам которые он обслуживает.

Чтобы такого не происходило, в конфигурационном файле, относящемуся к требуемому домену /etc/letsencrypt/renewal/domain.name.ru.conf в секции [renewalparams] можно указать параметр post_hook = systemctl reload nginx

Важно: параметр post_hook не перекрывает скрипты из директории /etc/letsencrypt/renewal-hooks/post/ то есть будет выполняться и то, и то.

Проверить выполнение хуков можно пустым запуском: certbot renew —dry-run

Проверить срок действия сертификата домена, подключившись к порту сервера:

echo | openssl s_client -connect domain.name.ru:443 | openssl x509 -noout -dates

Выдержка из мануала nginx про алгоритм работы после получения SIGHUP сигнала:

What happens is that when NGINX receives the HUP signal, it tries to parse the configuration file (the specified one, if present, otherwise the default), and if successful, tries to apply a new configuration (i.e. re-open the log files and listen sockets). If successful, NGINX runs new worker processes and signals graceful shutdown to old workers. Notified workers close listen sockets but continue to serve current clients. After serving all clients old workers shutdown. If NGINX couldn’t successfully apply the new configuration, it continues to work with an old configuration.

https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/#loading-a-new-configuration-using-signals

post_hook отсутствует в старых версиях certbot: https://community.letsencrypt.org/t/certbot-renewal-clearing-renewalparams/40645/4

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика