Nginx без учёта обновленных давайте шифруем сертификаты

У меня есть сервер, на котором запущены некоторые приложения NodeJ (точнее MeteorJ) на внутренних портах. Я использую Nginx для proxy_pass запросы с таргетингом на URL-адреса приложений.

Скажем app_1 работает на localhost:3000Я бы proxy_pass app1.domain.com в localhost:3000 а затем добавьте правило брандмауэра, чтобы ограничить доступ к порту 3000.

Затем я добавляю SSL на входящее соединение для app1.domain.com используя letsencrypt. Я генерирую сертификаты, используя certbot certonly -w /var/www/app1 -d app1.domain.com и затем установите файл конфигурации nginx для его использования.

Все работает безупречно, пока не пришло время обновить сертификат.

Для продления у меня есть следующая работа cron:

12 6 * * 3 /root/renew.sh

со следующим скриптом /root/renew.sh:

certbot renew 
service nginx reload

У меня проблема в том, что по истечении срока действия веб-сервер nginx не обслуживает новый сертификат!

Поэтому я добавил следующую работу cron:

30 6 * * 3 service nginx restart

но он все еще не может обновить сертификат (что приводит к ошибке в навигаторах, говоря, что подключение не безопасно из-за истечения срока действия сертификата). Поэтому мне нужно войти в систему и перезагрузить nginx.

Что не так в моей настройке?

Спасибо

0 ответов

Вы можете установить все в одной строке cronjob (измененная базовая настройка):

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --deploy-hook "nginx -t && systemctl restart nginx"

Это задание cron запускается дважды в день, чтобы проверить, истекает ли срок действия сертификата в следующие 30 дней. Это не должно вызывать проблем с производительностью.

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

Быть в курсе --deploy-hook Аргумент был добавлен в certbot версии 0.17, выпущенном в июле 2017 г.

После дополнительного тестирования, вот ответ на этот вопрос:

Задайте для задания cron указание на скрипт bash:

12 6 * * 3 /root/renew.sh

И установите скрипт bash следующим образом:

certbot renew
sleep 1m
service nginx reload

Обратите внимание на наличие sleep команда, позволяющая дождаться окончания обновления

Другие вопросы по тегам