Обзор Nginx
Nginx — это http сервер, чаще всего используемый в качестве:
- веб-сервера
- обратного прокси-сервер
- балансировщика нагрузки
- кэширующего сервера
Nginx работает по многопроцессной архитектуре, в которой один процесс главный, а множество других — рабочие.
Главный процесс выполняет задачи:
- чтение конфигурации,
- проверка конфигурации,
- управление рабочими процессами.
Рабочие процессы выполняют фактическую обработку запросов в соответствии с конфигурационным файлом.
Количество рабочих процессов задаётся в конфигурационном файле:
- может быть фиксированным для данной конфигурации,
- может автоматически устанавливаться равным числу доступных процессорных ядер.
Nginx использует модель, основанную на событиях, и механизмы для эффективного распределения запросов между рабочими процессами. Эти механизмы зависят от операционной системы и нужный механизм автоматически выбирается Nginx.
Версии Nginx в репозиториях SelectOS
В основном репозитории SelectOS предоставляется версия Nginx 1.22.1.
В тестовом репозитории SelectOS дополнительно есть альтернативная DPDK-версия на базе Nginx 1.25. На данный момент эта версия находится в стадии бета-тестирования.
Установка Nginx
Установка обычной версии Nginx:
apt install nginx
Установка DPDK-версии Nginx для сетевых карт Intel®:
apt install fast-nginx
DPDK-версия Nginx находится в тестовом репозитории в пакете fast-nginx. Для ее установки необходимо подключить публичный тестовый репозиторий в файле /etc/apt/sources.list.d/1.0.list
:
- закомментировать имеющийся репозиторий:
deb https://stable.see.selectel.ru selectos main contrib
- добавить тестовый репозиторий:
deb https://testing.see.selectel.ru selectos main contrib
- выполнить
sudo apt update
для обновления кеша пакетного менеджера
Конфиг Nginx: модули, директивы, контексты
То, как работает Nginx и его модули, определяют настройки конфигурационного файла nginx.conf
.
Он расположен в директории /etc/nginx
.
Nginx состоит из модулей. Модули настраиваются директивами, указанными в конфигурационном файле.
Директивы Nginx
Директивы делятся на простые и блочные:
- Простая директива состоит из имени и параметров, разделённых пробелами, и оканчивается точкой с запятой
;
. - Блочная директива состоит из имени, параметров и набора дополнительных инструкций (вместо
;
).
Дополнительные инструкции в блочной директиве размещаются внутри фигурных скобок ({
и })
.
Контексты Nginx
Контексты Nginx — это блочные директивы внутри фигурных скобок которых есть другие директивы. Директивы, помещённые в конфигурационном файле вне любого контекста, считаются находящимися в контексте main
.
Примеры директив и контекстов:
- директивы
events
иhttp
располагаются в контекстеmain
, - директива
server
— в контекстеhttp
, - директива
location
— в контекстеserver
.
Запуск и управление Nginx
Чтобы запустить Nginx, нужно выполнить исполняемый файл:
systemctl start nginx
После запуска Nginx им можно управлять с помощью команд:
systemctl stop nginx
— завершениеsystemctl reload nginx
— перезагрузка конфигурационного файла
Команда должна быть выполнена под тем же пользователем, под которым был запущен Nginx.
Перезагрузка конфигурационного файла Nginx
Изменения конфигурационного файла применяются:
- при перезагрузке конфигурации командой
systemctl reload nginx
- при перезапуске Nginx
При systemctl reload nginx
главный процесс выполняет следующие операции:
- получает сигнал о перезагрузке
- проверяет правильность синтаксиса нового конфигурационного файла
- пробует применить новую конфигурацию и запустить новые рабочие процессы
- отправляет требование завершиться старым рабочим процессам
Старые рабочие процессы, получив команду завершиться, прекращают принимать новые запросы и продолжают обслуживать оставшиеся текущие запросы. После этого старые рабочие процессы завершаются.
В случае сбоя главный процесс откатывает изменения и продолжает работать со старой конфигурацией.