Событийная модель

Тема дорожной карты · Nginx

Событийная модель Nginx — асинхронная неблокирующая архитектура, позволяющая одному рабочему процессу обрабатывать тысячи одновременных соединений без порождения потока или процесса на каждый запрос; именно это является ключевой причиной превосходства Nginx над веб-серверами с моделью «один поток на соединение» при высокой конкурентности. Nginx использует наиболее эффективный механизм мультиплексирования I/O, доступный в операционной системе: epoll на Linux, kqueue на FreeBSD/macOS — настраивается в блоке events директивами use epoll; и worker_connections 1024;, задающей максимальное число соединений на воркер. Число рабочих процессов обычно устанавливается равным числу ядер CPU через worker_processes auto; в главном контексте /etc/nginx/nginx.conf, обеспечивая полное использование доступного оборудования без накладных расходов на переключение контекста. Поскольку событийная модель является однопоточной для каждого воркера, любая блокирующая операция (например, медленное чтение с диска или синхронный DNS-запрос) может остановить весь воркер; Nginx решает эту проблему с помощью директив aio и пула потоков для дискового I/O в сценариях высокопроизводительной отдачи статических файлов. Понимание событийной модели Nginx принципиально важно для правильного выбора значений worker_processes, worker_connections и пула upstream keepalive в высоконагруженном развёртывании обратного прокси или балансировщика нагрузки.

Как это работает

Событийная модель — высокопроизводительный HTTP-сервер, reverse proxy, load balancer и TLS-терминатор на event-driven асинхронной архитектуре (master + worker-процессы; epoll/kqueue на Linux/BSD). Один worker держит тысячи одновременных соединений без overhead one-thread-per-connection. Типичные деплои: edge HTTP-сервер (TLS + reverse proxy), сервер статики, внутренний load balancer, API-шлюз. Альтернативы: Caddy (auto-HTTPS), HAProxy (L4 + L7), Traefik (Docker/k8s-native), Envoy (xDS, service mesh).

Когда применять

Nginx — закалённый в боях edge HTTP-сервер для production-трафика: TLS-терминация, gzip/brotli, кеш, rate-limit и reverse-proxy в одном бинаре. Caddy — когда нужна auto-HTTPS + проще конфиг и не нужны все фичи nginx. HAProxy — для L4 (TCP) балансировки или экстремального throughput. Envoy — для service mesh / xDS-driven динамической конфигурации.

Типичные ошибки

Ловушки Событийная модель: копирование nginx-конфигов из блогов без понимания (некоторые с устаревшими SSL-cipher, небезопасными заголовками); устаревшая версия nginx на публичном боксе (CVE копятся); путаница nginx vs nginx-plus (некоторые директивы только в коммерческой — health check через upstream health_check это одна); смешение nginx и Caddy без чётких границ.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…