worker_connections
Тема дорожной карты · Nginx
Директива worker_connections задаёт максимальное число одновременных соединений, которые может обработать один рабочий процесс Nginx; умножение этого значения на worker_processes даёт теоретический максимум общего числа соединений, которые веб-сервер Nginx может обслуживать одновременно. Директива размещается внутри блока events в nginx.conf — например, worker_connections 4096 — и её практический верхний предел ограничен лимитом файловых дескрипторов ОС, который должен быть увеличен через worker_rlimit_nofile в контексте main и настройку ulimit -n системы. Для развёртывания обратного прокси или балансировки нагрузки каждый проксируемый запрос обычно потребляет два соединения (одно от клиента к Nginx, одно от Nginx к upstream), поэтому эффективное число проксируемых запросов равно worker_processes × worker_connections / 2. Типичная начальная конфигурация для высоконагруженных развёртываний Nginx устанавливает worker_connections 1024 или выше совместно с multi_accept on (что указывает каждому воркеру принимать все ожидающие соединения за раз, а не по одному) и use epoll на Linux для максимальной пропускной способности событийной обработки. Мониторинг счётчиков активных соединений через stub_status и их сравнение с лимитами worker_connections помогает определить, когда мощность соединений воркеров Nginx становится узким местом.
Как это работает
worker_connections начинается с: worker_processes auto, worker_connections 4096 (или больше), worker_rlimit_nofile 65536, multi_accept on, use epoll, sendfile on, tcp_nopush on, tcp_nodelay on. Keepalive на клиентской стороне (keepalive_timeout 65) и к upstream (upstream { keepalive 32; }). Тюньте буферы (client_body_buffer_size, client_max_body_size, proxy_buffer_size). Профайл через nginx_amplify или Lua-tracing.
Когда применять
Тюньте после замеров — не копируйте случайные sysctl + nginx.conf-заклинания из интернета. Дефолты разумны для умеренного трафика. Поднимайте при конкретных боттлнеках (исчерпаны worker connections, file descriptors, upstream-таймауты). nginx -V — для compile-flags; nginx -T — для дампа эффективного полного конфига.
Типичные ошибки
Ловушки worker_connections: worker_connections 100000 без поднятия OS-лимита файловых дескрипторов (ulimit -n) — nginx упирается в OS-лимит; тюнинг tcp_nopush для streaming-ответов (задерживает их); buffer-настройки cargo-cult из CDN-конфига nginx без понимания (трата RAM). Меряйте, меняйте по одной ручке.