digital-garden/meta/zero/00 Nginx.md
2024-11-27 17:33:36 +03:00

41 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)