Нужно ли перезапускать Nginx, если я обновляю свои сертификаты безопасности?

33

Поэтому я настраиваю сервер nginx с включенным SSL с определением сервера примерно так:

server {
    listen :80;
    listen [::]:80;
    server_name example.org;
    root /foo/bar;

    ssl on;
    ssl_certificate /path/to/public/certificate;
    ssl_certificate_key /path/to/private/key;

    ...
}

Вы поняли (пожалуйста, прости любые опечатки).

Во всяком случае, то, что мне интересно, это; если я продляю свои сертификаты, есть ли способ установить их без перезапуска nginx?

Например, если бы я использовал символические ссылки от /path/to/public/certificateи /path/to/private/key, указывая на мой текущий сертификат (ы), мне все равно нужно было бы перезапустить, nginxесли бы я просто изменил их, чтобы они указывали на новые (обновленные) сертификаты? Есть ли альтернативы?

Haravikk
источник

Ответы:

26

Да, я уверен, что вам потребуется перезагрузить Nginx, чтобы обновленные сертификаты отображали правильную дату истечения срока действия, но простая очистка кэша и просмотр должны позволить вам просмотреть это.

Или, если вы предпочитаете cli, вы всегда можете использовать старую доверенную команду OpenSSL:

echo | openssl s_client -connect your.domain.com:443 | openssl x509 -noout -dates

Это даст вам текущие даты в сертификате. В вашем случае порт будет 80 вместо 443.

Много раз nginx -s reloadне работает, как ожидалось. Во многих системах (Debian и т. Д.) Вам нужно будет использовать /etc/init.d/nginx reload.

Вы всегда можете указать файл конфигурации напрямую, если ничего не помогает, с помощью nginx -c /path/to/nginx.conf.

rubynorails
источник
К сожалению, эти прослушивания должны были быть для порта 443, мой плохой! В любом случае, спасибо за отличный ответ!
Харавикк
8
nginx reloadи перезапуск Nginx - это две разные вещи: reloadне перезапускать Nginx, а только отправлять ему сигнал SIGHUP. Достаточно ли сигнала SIGHUP?
Портон
11
Да. Отправка SIGHUP приведет к тому, что nginx переключится на обновленный сертификат.
rspeed 22.09.16
Какова функция echo |вашей команды? Если я пропущу это, я не получу подсказку назад. Я хотел бы получить выходные данные notAfterи сравнить их с текущей датой, чтобы спамить себя за пару дней до истечения срока действия сертификата.
Амеди Ван Гассе
@AmedeeVanGasse echoтруба просто заставляет оболочку OpenSSL чисто выйти обратно в Bash и вернуть вывод как обычно. Это необходимо для чистого выхода для использования в сценариях и для целей автоматизации, как будто вы планируете. Я реализовал множество сценариев, таких как тот, который вы планируете, используя те же основные функции.
Rubynorails
21

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

Если случится так, что nginx не сможет прочитать некоторые сертификаты SSL, я продолжу работать, используя более старую конфигурацию. Иначе говоря, он продолжит функционировать и обрабатывать запросы независимо от того, что вы сделали с вашими конфигурационными файлами. Даже если они сломаны, ваши сайты все равно будут открыты.

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

sudo service nginx reload

В большинстве современных дистрибутивов с systemd, используемым по умолчанию, вы также можете перезагрузить nginx с помощью следующей команды:

sudo systemctl reload nginx
sanmai
источник
3
На Ubuntu 16 , CentOS 7 и других системах, которые systemdвы поддерживаете, вы также можете запускать sudo systemctl reload nginx(на которые sudo service nginx reloadвыше ссылается).
Вилле
@ Вилле, ты прав, но это еще одна команда, которую нужно запомнить; и нет там
системного
Я люблю делать service nginx restart. Я никогда не устаю смотреть, как быстро это завершается. Однако, если он находится в работе cron, и я не буду видеть ничего из этого, я бы предпочел выполнить какую-то перезагрузку, чтобы избежать прерывания какого-либо постоянного сеанса или ожидающей операции, которая может продолжаться.
Рольф