Вопрос: Конфигурация Nginx без перезарядки


Я использую nginx как обратный прокси. Всякий раз, когда я обновляю конфигурацию для нее, используя

sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"

Мне грозит кратковременное простоя. Как я могу избежать этого?


90
2018-04-11 17:13


Источник


Являются ли они командами командной строки? Я никогда не видел, чтобы кто-нибудь обертывал всю команду sudo в таких кавычках, это может быть необязательно. - brianmearns
Просто общий комментарий: я считаю, что стандартная / рекомендуемая практика создает мягкую / символическую ссылку для настройки вашего сайта в соответствии с sites-enabled, а не копировать его. Не связано с вашей конкретной проблемой, но вы можете посмотреть на это. - brianmearns
Вы не должны сталкиваться с простоями. kill HUP это способ сделать изящную перезагрузку в nginx. - Jonathan Vanasco


Ответы:


Бег service nginx reload или /etc/init.d/nginx reload

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

Иногда вы можете захотеть sudo 


144
2018-04-11 17:24



Оба они должны делать именно то, что говорится в вопросе: send SIGHUP к основному процессу nginx. Не должно быть разницы. nginx.org/en/docs/control.html - Gnarfoz
Когда я выдаю команду в CentOS, она продолжает говорить «Использование /etc/init.d/nginx (start..stop ... restart..reload)» .. и именно так я и использовал его. В файле /init.d/nginx я обнаружил kill -HUP cat $PIDFILE || echo -n "не может перезагрузить" - mashup
знаете ли вы, какая разница между service nginx reloadа также nginx -s reload? Если я запустил первый, я получаю этот вывод: Reloading nginx configuration: nginx., но мои изменения не обновляются. Если я запустил последнее, я не получаю выход, но мои изменения отражаются. - Ryan Quinn
Я просто попробовал это после добавления log_not_found но обнаружил, что мне пришлось фактически перезапустить, чтобы заставить его работать. Думаю, перезагрузка не работает для всех директив? - mydoghasworms


Бег /usr/sbin/nginx -s reload

Видеть http://wiki.nginx.org/CommandLine для дополнительных параметров командной строки.


49
2017-07-27 13:46



Наконец, команда, которая работает в Debian Jessie. - danger89


Нет, вы ошибаетесь, вы не должны сталкиваться с простоями с описанной вами процедурой. (Nginx может выполнять не только перезагрузку конфигурации «на лету» без каких-либо простоев, но даже обновление исполняемого файла «на лету», но без простоя).

Согласно http://nginx.org/docs/control.html#reconfiguration, отправив HUP сигнал nginx гарантирует, что он выполнит изящный перезапуск, и если файлы конфигурации неверны, вся процедура будет отменена, и вы останетесь с nginx, как и перед отправкой HUP сигнал. Ни при каких обстоятельствах не должно быть простоев.

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


7
2018-06-22 16:58





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

Если конкретная служба испытывает простоя во время перезагрузки, это можно обойти, запустив ту же услугу на нескольких серверах, предпочтительно используя балансировщик нагрузки. В этом случае вы можете выгружать один сервер за раз и перезагружать / перезапускать его. Затем его можно повторно добавить после подтверждения, что все в порядке.


2
2018-04-11 17:24



Хотя это напрямую не отвечает на этот вопрос, это, безусловно, лучший сценарий, который OP будет разумным, чтобы следовать за тем, чтобы избежать простоев в целом. - Andrew M.
Подробная информация о том, как nginx обрабатывает разные сигналы: nginx.org/en/docs/control.html - Gnarfoz