worker_processes и worker_connections в nginx: сколько процессов и соединений
worker_processes задаёт, сколько рабочих процессов запустит nginx, а worker_connections — сколько соединений держит каждый из них. В Ubuntu стоят auto и 768. Увеличивать лимит нужно, если в журнале ошибок появились строки worker_connections are not enough или Too many open files.
Содержание 10
Что сделать прямо сейчас
- Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
- Посмотрите текущие значения:
grep -n worker_ /etc/nginx/nginx.conf. В Ubuntu ответ — две строки, worker_processes auto и worker_connections 768, с номерами строк. - Проверьте, хватает ли соединений:
sudo grep -c 'worker_connections are not enough' /var/log/nginx/error.log. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Ответ — число таких строк в текущем журнале. Предыдущий журнал проверит та же команда с файлом /var/log/nginx/error.log.1.
- Если везде 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
- Откройте главный файл настроек:
sudo nano /etc/nginx/nginx.conf. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - В блоке events поменяйте число в строке worker_connections, например на 2048.
- После строки worker_processes добавьте строку
worker_rlimit_nofile 4096;— зачем она. - Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки:
sudo nginx -t. В ответе должны быть слова syntax is ok и test is successful. Тогда примените их:sudo systemctl reload nginx. Если команда ничего не ответила, настройки применены. - Проверьте лимит рабочего процесса:
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 limit | worker_connections больше лимита открытых файлов: добавьте worker_rlimit_nofile. При уровне журнала error, как в Ubuntu, это предупреждение не видно |
worker_connections are not enough for … listening sockets | worker_connections не хватает даже на адреса из строк listen: поставьте число больше |
"worker_connections" directive is not allowed here | строка стоит не в блоке events — где её писать |
Источники
- Документация nginx: worker_processes — по умолчанию 1, пишется вне блоков; начать советуют с числа ядер, auto определяет его само.
- Документация nginx: worker_connections — по умолчанию 512, блок events; в число входят и соединения с проксируемыми серверами; предел — лимит открытых файлов.
- Документация nginx: worker_rlimit_nofile — лимит открытых файлов рабочих процессов, меняется без перезапуска главного процесса.
- Документация nginx: руководство для начинающих — главный процесс читает и проверяет настройки и управляет рабочими, рабочие обрабатывают запросы.
- Файл nginx.conf из пакета nginx в Ubuntu 24.04 —
worker_processes auto,worker_connections 768,gzip on, журналы в /var/log/nginx/, подключение conf.d и sites-enabled. - Файл службы nginx.service в Ubuntu 24.04 — лимит открытых файлов (LimitNOFILE) в нём не задан.
- Документация systemd v255: systemd-system.conf — DefaultLimitNOFILE: лимит открытых файлов для служб по умолчанию, первое число — 1024.
- Исходный код nginx 1.24.0: nginx.c — worker_processes auto — по числу процессоров.
- Исходный код nginx 1.24.0: ngx_event.c — worker_connections по умолчанию 512; ошибка not enough for listening sockets; предупреждение exceed open file resource limit — уровень warn.
- Исходный код nginx 1.24.0: ngx_connection.c — worker_connections are not enough — уровень alert; reusing connections — уровень warn, простаивающие соединения закрываются.
- Исходный код nginx 1.24.0: ngx_event_accept.c — accept4() с ошибкой Too many open files — уровень crit, приём соединений ненадолго отключается; соединение сверх worker_connections закрывается.
- Исходный код nginx 1.24.0: ngx_process_cycle.c — worker_rlimit_nofile задаёт рабочему процессу текущий и предельный лимит одним числом; строки master process и worker process.
- Исходный код Linux 6.8: fs/proc/base.c — файл /proc/PID/limits со строкой Max open files, читать его может любой пользователь.
Сверено 14 октября 2026 года.
Что почитать дальше
- Настройки nginxкак устроены файлы и блоки, главные директивы.
- Журналы nginxгде error.log и как его читать.
- 502 Bad Gatewayесли запросы не доходят до приложения.
- Как установить nginx на Ubuntuустановка и первая проверка.
- Все ошибки nginxсообщения nginx -t и журнала и что они значат.