--- aliases: - nginx tags: - type/zero-link title: Nginx --- Есть мастер процесс, который управляет асинхронными (В Apache воркеры были синхронные) воркерами. Количество воркеров, имеет смысл увеличивать количество воркеров до числа ядер в вашей системе, это отдельные процессы. Внутри воркера каждый воркер использует [неблокирующийся ввод-вывод](Не%20блокирующийся%20ввод-вывод.md) и [кооперативную многозадачность](../../dev/fundamental/Кооперативная%20многозадачность.md), чтобы обслужить большое количество одновременных соединений. Воркеры нужны только для того, чтобы распараллелиться между отдельными процессорами. Nginx может также выступать в качестве [Rеverse proxy](../../dev/architecture/Rеverse%20proxy.md). Узнать сколько и каких воркеров запущено можно командой. Обычно количество воркеров равно количеству ядер. ``` ps aux | grep nginx ``` **Преимущества:** - Умеет применять изменения конфига без перезапуска. - Умеет обновлять саму версию nginx без остановки: сначала обновляются воркеры, когда все воркеры обновлены, обновляется мастер процесс. ## Конфигурация - Вне зависимости от порядка location запрос будет обработан одинаково. Так как nginx ищет максимально возможное совпадение с префиксным location'ом, не заданным регулярным выражением, и после этого выбирает этот location. Используется конфигурация выбранного location'а, а все остальные location'ы игнорируются. - Для регулярных выражений мы не можем определить максимальное совпадение, то выбирается location, у которого регулярное выражение совпало самым первым. ==То есть регулярные выражения добавляют зависимость от порядка, поэтому их стоит избегать== - Правильный подход – использование copy-paste, вместо попытки вынести общие части конфигурации. То есть, внутри location'а должны быть все необходимые директивы для его обработки. - Rewrites **не** надо использовать вообще. - Evil – тоже не рекомендуемая конструкция в nginx, потому что, как работает внутри Evil, знает человек 10 в мире, и вы вряд ли входите в их число. - Используйте if только для возврата какого-то ответа клиенту ## Оптимизация Nginx - [Оптимизация работы соединений Nginx](Оптимизация%20работы%20соединений%20Nginx.md) - [Кэширование на стороне Nginx](../../dev/devops/nginx/Кэширование%20на%20стороне%20Nginx.md) - [Кэширование статики в Nginx](../../dev/devops/nginx/Кэширование%20статики%20в%20Nginx.md) - [Балансировка нагрузки в Nginx](../../dev/devops/nginx/Балансировка%20нагрузки%20в%20Nginx.md) - [GZIP сжатие в Nginx](../../dev/devops/nginx/GZIP%20сжатие%20в%20Nginx.md) ## Дополнительные материалы - [Оптимизация NGINX](https://struchkov.dev/blog/ru/nginx-optimization/) - [Масштабируемая конфигурация nginx](https://highload.guide/blog/scalable-configuration-nginx.html) - [[../../dev/devops/nginx/Балансировка нагрузки в Nginx|Балансировка запросов на Nginx]] ## Заметки - Есть какой-то модуль, который позволяет отправлять события в [00 Kafka](00%20Kafka.md)