digital-garden/wiki/zero/00 Nginx.md

37 lines
4.2 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
aliases:
- nginx
tags:
- type/zero-link
zero-link:
- "[[00 Сети]]"
---
Есть мастер процесс, который управляет асинхронными (В Apache воркеры были синхронные) воркерами. Количество воркеров, имеет смысл увеличивать количество воркеров до числа ядер в вашей системе, это отдельные процессы. Внутри воркера каждый воркер использует [неблокирующийся ввод-вывод](Не%20блокирующийся%20ввод-вывод.md) и [кооперативную многозадачность](Кооперативная%20многозадачность.md), чтобы обслужить большое количество одновременных соединений. Воркеры нужны только для того, чтобы распараллелиться между отдельными процессорами.
Nginx может также выступать в качестве [Rеverse proxy](Rеverse%20proxy.md).
Узнать сколько и каких воркеров запущено можно командой. Обычно количество воркеров равно количеству ядер.
```
ps aux | grep nginx
```
## Плюсы 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](Кэширование%20на%20стороне%20Nginx.md)
- [Кэширование на стороне клиента Nginx](Кэширование%20на%20стороне%20клиента%20Nginx.md)
- [Балансировка запросов на Nginx](Балансировка%20запросов%20на%20Nginx.md)
2024-06-17 18:42:04 +03:00
- [GZIP сжатие в Nginx](GZIP%20сжатие%20в%20Nginx.md)
## Дополнительные материалы
- [Масштабируемая конфигурация nginx](https://highload.guide/blog/scalable-configuration-nginx.html)