Запуск Nginx, перезагрузка, перезагрузка файлов конфигурации и плавное обновление
Запуск Nginx, перезагрузка, перезагрузка файлов конфигурации и плавное обновление

Предисловие

Сначала давайте представим, что такое Nginx. Боюсь, некоторые студенты могут забыть определение Nginx!

Nginx имеет основной процесс и несколько рабочих процессов. Основная функция основного процесса — чтение и оценка файлов конфигурации, а также управление рабочими процессами. Рабочие процессы фактически обрабатывают запросы. Количество рабочих процессов настраивается в файле конфигурации и обычно равно количеству ядер и потоков ЦП.

Nginx можно управлять с помощью сигналов. По умолчанию идентификатор основного процесса записывается в файле /usr/local/nginx/logs/nginx.pid. Сигнал может быть отправлен в nginx через исполняемый файл nginx (сигнал nginx -s), либо он может быть отправлен в nginx через команду unix kill. В этом случае сигнал отправляется непосредственно процессу с указанным идентификатором процесса. например: убить QUIT 1628.

1. Старт

Запустите nginx и запустите исполняемый файл nginx напрямую:

Язык кода:javascript
копировать
[root@localhost ~]# /usr/local/nginx/sbin/nginx

2. Остановите Nginx

Быстрое завершение работы: nginx -s stop or kill -TERM номер основного процесса или kill -INT номер основного процесса

Язык кода:javascript
копировать
[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s stop
Язык кода:javascript
копировать
//Вариант 2
[root@localhost sbin]# ps -ef |grep nginx|grep master
корень 9879 1 0 13:15 ?        00:00:00 nginx: главный процесс ./nginx
[root@localhost sbin]# kill -TERM 9879
Язык кода:javascript
копировать
//Вариант 3
[root@localhost sbin]# kill -INT 9879

Грациозное завершение работы (не принимать новые запросы на подключение, дождаться обработки старых запросов на подключение перед закрытием): nginx -s quit or kill -QUIT номер основного процесса

Язык кода:javascript
копировать
[root@songguoliang sbin]# pwd
/usr/local/nginx/sbin
[root@songguoliang sbin]# ./nginx -s quit

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

Язык кода:javascript
копировать
[root@localhost sbin]# ps -ef |grep nginx
root       9889      1  0 13:17 ?        00:00:00 nginx: master process ./nginx
nobody     9890   9889  0 13:17 ?        00:00:00 nginx: worker process
root       9893   2008  0 13:18 pts/1    00:00:00 grep nginx
[root@localhost sbin]# kill -QUIT 9889

3. Перезагрузите файл конфигурации.

nginx -s перезагрузить или убить -HUP идентификатор основного процесса

Чтобы основной процесс перечитал файл конфигурации, сигнал HUP должен быть отправлен основному процессу. Как только основной процесс получает сигнал на перезагрузку конфигурации, он проверяет правильность синтаксиса файла конфигурации, а затем пытается. чтобы применить новую конфигурацию, то есть открыть новый файл журнала и новый сокет. При прослушивании в случае сбоя он откатывает изменения конфигурации и продолжает использовать старую конфигурацию. В случае успеха он запускает новый рабочий процесс и отправляет сообщение старому рабочему процессу о корректном завершении работы. Старый рабочий процесс получает сообщение. завершение работы После сигнала новые запросы не будут получены. Если запрос уже обрабатывается, он будет закрыт после обработки текущего запроса. Если запрос не обрабатывается, он будет закрыт напрямую.

Язык кода:javascript
копировать
[root@localhost sbin]# ./nginx -s reload

Вариант 2:

Язык кода:javascript
копировать
[root@localhost sbin]# ps -ef|grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9949   9944  0 13:23 ?        00:00:00 nginx: worker process
root       9960   9917  0 13:28 pts/1    00:00:00 grep nginx
[root@songguoliang sbin]# kill -HUP 9944

4. Тестовый файл конфигурации.

Проверьте правильность синтаксиса файла конфигурации, а затем попробуйте открыть конфигурацию, содержащуюся в файле: nginx -t

Язык кода:javascript
копировать
[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

5. Проверьте информацию о версии nginx.

Язык кода:javascript
копировать
[root@zhouzhou sbin]# ./nginx -v
nginx version: nginx/1.10.1

6. Просмотрите информацию о версии nginx, скомпилированную версию и параметры конфигурации.

Язык кода:javascript
копировать
[root@songguoliang sbin]# ./nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
configure arguments: --prefix=/usr/local/nginx

7. Перезапустите файл журнала.

Перезапустите файл журнала, который обычно используется при резервном копировании файла журнала: nginx -s reopen or kill -USR1 номер основного процесса.

Язык кода:javascript
копировать
[root@localhost sbin]# ./nginx -s reopen

[root@localhost sbin]# kill -USR1 2030

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

8. плавное обновление nginx

Если вам нужно обновить, добавить или удалить серверные модули, вы можете использовать плавное обновление nginx, чтобы обновить nginx без остановки службы.

(1) Замените старый исполняемый файл новым исполняемым файлом nginx, то есть загрузите новый nginx и перекомпилируйте его по пути установки старой версии (перед перекомпиляцией вы можете создать резервную копию старого исполняемого файла).

(2) Отправьте сигнал USR2 на идентификатор основного процесса nginx.

Язык кода:javascript
копировать
[root@localhost sbin]# kill -USR2 9944

Обработка перед выполнением команды:

Язык кода:javascript
копировать
[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9965   9944  0 13:29 ?        00:00:00 nginx: worker process
root      10010   9917  0 13:42 pts/1    00:00:00 grep nginx

Процесс после выполнения команды:

Язык кода:javascript
копировать
[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9965   9944  0 13:29 ?        00:00:00 nginx: worker process
root      10012   9944  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10015   9917  0 13:43 pts/1    00:00:00 grep nginx

После отправки сигнала USR2 в nginx nginx переименует файл logs/nginx.pid в nginx.pid.oldbin, затем использует новый исполняемый файл для запуска нового основного процесса nginx и соответствующего рабочего процесса и создаст новый nginx. pid сохраняет новый номер основного процесса

Язык кода:javascript
копировать
[root@songguoliang logs]# pwd
/usr/local/nginx/logs
[root@songguoliang logs]# ll
Общая дозировка 16
-rw-r--r--. 1 nobody root 596 Октябрь  8 13:02 access.log
-rw-r--r--. 1 nobody root 881 Октябрь  8 13:43 error.log
-rw-r--r--. 1 root   root   6 Октябрь  8 13:43 nginx.pid
-rw-r--r--. 1 root   root   5 Октябрь  8 13:22 nginx.pid.oldbin
[root@songguoliang logs]# cat nginx.pid
10012
[root@songguoliang logs]# cat nginx.pid.oldbin 
9944

В это время новый экземпляр и старый экземпляр nginx работают одновременно, совместно обрабатывая соединение запроса. Следующим шагом будет завершение процесса старого экземпляра.

Сначала отправьте сигнал WINCH старому основному процессу, убейте -WINCH старый номер основного процесса.

Язык кода:javascript
копировать
[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
nobody     9965   9944  0 13:29 ?        00:00:00 nginx: worker process
root      10012   9944  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10092   9917  0 14:05 pts/1    00:00:00 grep nginx
[root@localhost sbin]# kill -WINCH 9944
[root@localhost sbin]# 
[root@localhost sbin]# 
[root@localhost sbin]# 
[root@localhost sbin]# ps -ef |grep nginx
root       9944      1  0 13:22 ?        00:00:00 nginx: master process ./nginx
root      10012   9944  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10094   9917  0 14:06 pts/1    00:00:00 grep nginx

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

Отправьте сигнал QUIT старому основному процессу для завершения его работы.

Язык кода:javascript
копировать
[root@localhost sbin]# kill -QUIT 9944
[root@localhost sbin]# ps -ef |grep nginx
root      10012      1  0 13:43 ?        00:00:00 nginx: master process ./nginx
nobody    10013  10012  0 13:43 ?        00:00:00 nginx: worker process
root      10118   9917  0 14:16 pts/1    00:00:00 grep nginx

После отправки сигнала QUIT старому основному процессу старый основной процесс завершает работу и удаляет файл logs/nginx.pid.oldbin. Обновление nginx завершено.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose