Справочник

worker_processes и worker_connections в nginx: сколько процессов и соединений

worker_processes задаёт, сколько рабочих процессов запустит nginx, а worker_connections — сколько соединений держит каждый из них. В Ubuntu стоят auto и 768. Увеличивать лимит нужно, если в журнале ошибок появились строки worker_connections are not enough или Too many open files.

≈ 8 мин чтения
Содержание 10

Что сделать прямо сейчас

  1. Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
  2. Посмотрите текущие значения: grep -n worker_ /etc/nginx/nginx.conf. В Ubuntu ответ — две строки, worker_processes auto и worker_connections 768, с номерами строк.
  3. Проверьте, хватает ли соединений: sudo grep -c 'worker_connections are not enough' /var/log/nginx/error.log. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  4. Ответ — число таких строк в текущем журнале. Предыдущий журнал проверит та же команда с файлом /var/log/nginx/error.log.1.
  5. Если везде 0, соединений хватает и менять ничего не нужно. Если больше 0 — увеличьте worker_connections.

Что значат эти настройки

ДирективаГде пишетсяЗначениеЧто задаёт
worker_processesв начале nginx.conf, вне блоковпо умолчанию 1, в Ubuntu autoсколько рабочих процессов запустить
worker_connectionsв блоке eventsпо умолчанию 512, в Ubuntu 768сколько соединений одновременно держит один рабочий процесс
worker_rlimit_nofileвне блоков, как worker_processesне заданосколько файлов и соединений может открыть рабочий процесс

«По умолчанию» — значение, если строки в файле нет. Значения по умолчанию на этой странице — для nginx 1.24 из Ubuntu 24.04. Версию на сервере покажет nginx -v.

worker_processes: сколько процессов

nginx работает несколькими процессами. Главный (master process) читает и проверяет настройки и управляет остальными, он запущен от root. Запросы посетителей обрабатывают рабочие процессы (worker process) — в Ubuntu они работают от пользователя www-data.

Со значением auto nginx запускает столько рабочих процессов, сколько у сервера ядер процессора. Справка nginx советует: если не знаете, какое число выбрать, начните с числа ядер — auto определяет его само. Сколько ядер у сервера, покажет команда nproc.

Проверить, сколько процессов запущено: ps -C nginx -o user,args. В ответе есть строка со словами master process от root и по строке worker process от www-data на каждый рабочий процесс.

worker_connections: сколько соединений

worker_connections — сколько соединений одновременно может держать один рабочий процесс. В это число входят не только посетители, но и соединения nginx с приложением или PHP-FPM, а также открытые соединения браузеров, которые ждут следующего запроса.

Всего nginx удержит до worker_processes × worker_connections соединений. На сервере с двумя ядрами и настройками Ubuntu: 2 × 768 = 1536. Если сайт передаёт запросы приложению или PHP-FPM, каждый такой запрос занимает два соединения: от посетителя к nginx и от nginx к приложению.

Когда свободных соединений остаётся мало, nginx закрывает те, что простаивают. Если свободных не осталось совсем, новое соединение nginx сразу закрывает, а в журнал ошибок пишет строку worker_connections are not enough.

Как увеличить worker_connections

  1. Откройте главный файл настроек: sudo nano /etc/nginx/nginx.conf. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  2. В блоке events поменяйте число в строке worker_connections, например на 2048.
  3. После строки worker_processes добавьте строку worker_rlimit_nofile 4096; — зачем она.
  4. Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки: sudo nginx -t. В ответе должны быть слова syntax is ok и test is successful. Тогда примените их: sudo systemctl reload nginx. Если команда ничего не ответила, настройки применены.
  5. Проверьте лимит рабочего процесса: grep 'open files' /proc/$(pgrep -u www-data -n nginx)/limits. В строке Max open files первые два числа — текущий и предельный лимит: оба должны стать 4096.

Начало файла после правки:

user www-data;
worker_processes auto;
worker_rlimit_nofile 4096;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 2048;
    # multi_accept on;
}

worker_rlimit_nofile берите с запасом, например вдвое больше worker_connections: рабочему процессу нужны не только соединения, но и открытые файлы — страницы, картинки, журналы.

Лимит открытых файлов

Для Linux каждое соединение — открытый файл. Сколько файлов может открыть процесс, задаёт лимит открытых файлов. nginx в Ubuntu запускает systemd, а в файле службы nginx.service свой лимит не задан. Поэтому действует лимит systemd по умолчанию — 1024 открытых файла на процесс.

Если worker_connections больше этого лимита, nginx упрётся в лимит файлов раньше, чем в число соединений. В журнале ошибок появятся строки accept4() failed (24: Too many open files), и nginx ненадолго перестанет принимать новые соединения.

Строка worker_rlimit_nofile поднимает этот лимит для рабочих процессов nginx. Перезапускать nginx не нужно, хватит reload: рабочие процессы запустятся заново уже с новым лимитом.

Где писать эти строки

СтрокаГде писать
worker_processesв начале /etc/nginx/nginx.conf, вне всех блоков
worker_rlimit_nofileтам же, вне всех блоков
worker_connectionsвнутри блока events в /etc/nginx/nginx.conf

В файлах сайтов и в блоках http и server эти строки писать нельзя: nginx -t ответит, что директива здесь не разрешена, — разбор ошибки.

Ошибки и как их исправить

Что видитеЧто делать
worker_connections are not enough в журнале ошибоксоединений не хватило, новые соединения nginx закрывает, — увеличьте worker_connections
worker_connections are not enough, reusing connectionsпредупреждение: свободных соединений мало, и nginx закрывает простаивающие. Видно, только если у журнала уровень warn или ниже. Увеличьте worker_connections
accept4() failed (24: Too many open files)рабочий процесс упёрся в лимит открытых файлов — добавьте worker_rlimit_nofile
worker_connections exceed open file resource limitworker_connections больше лимита открытых файлов: добавьте worker_rlimit_nofile. При уровне журнала error, как в Ubuntu, это предупреждение не видно
worker_connections are not enough for … listening socketsworker_connections не хватает даже на адреса из строк listen: поставьте число больше
"worker_connections" directive is not allowed hereстрока стоит не в блоке events — где её писать

Источники

Сверено 14 октября 2026 года.

Что почитать дальше