Есть мастер процесс, который управляет асинхронными (В Apache воркеры были синхронные) воркерами. Количество воркеров, имеет смысл увеличивать количество воркеров до числа ядер в вашей системе, это отдельные процессы. Внутри воркера каждый воркер использует неблокирующийся ввод-вывод и кооперативную многозадачность, чтобы обслужить большое количество одновременных соединений. Воркеры нужны только для того, чтобы распараллелиться между отдельными процессорами.
Nginx может также выступать в качестве Rеverse proxy.
Узнать сколько и каких воркеров запущено можно командой. Обычно количество воркеров равно количеству ядер.
ps aux | grep nginx
Плюсы nginx
- Умеет применять изменения конфига без перезапуска.
- Умеет обновлять саму версию nginx без остановки: сначала обновляются воркеры, когда все воркеры обновлены, обновляется мастер процесс.
Конфигурация
- Вне зависимости от порядка location запрос будет обработан одинаково. Так как nginx ищет максимально возможное совпадение с префиксным location’ом, не заданным регулярным выражением, и после этого выбирает этот location. Используется конфигурация выбранного location’а, а все остальные location’ы игнорируются.
- Для регулярных выражений мы не можем определить максимальное совпадение, то выбирается location, у которого регулярное выражение совпало самым первым. То есть регулярные выражения добавляют зависимость от порядка, поэтому их стоит избегать
- Правильный подход – использование copy-paste, вместо попытки вынести общие части конфигурации. То есть, внутри location’а должны быть все необходимые директивы для его обработки.
- Rewrites не надо использовать вообще.
- Evil – тоже не рекомендуемая конструкция в nginx, потому что, как работает внутри Evil, знает человек 10 в мире, и вы вряд ли входите в их число.
- Используйте if только для возврата какого-то ответа клиенту
Оптимизация Nginx
- Оптимизация работы соединений Nginx
- Кэширование на стороне Nginx
- Кэширование статики в Nginx
- Балансировка нагрузки в Nginx
- GZIP сжатие в Nginx
Дополнительные материалы
Заметки
- Есть какой-то модуль, который позволяет отправлять события в 00 Kafka