Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: worker_connections are not enough (1024 connections limit reached) Linux / DevOps

Nginx: worker_connections are not enough — Тюнинг под высокие нагрузки

Обновлено: 18.08.2026  ·  Официальная база знаний

Во время резкого наплыва посетителей или при DDoS-атаке Nginx перестает принимать новые TCP-соединения, возвращая клиентам сбои подключения или задержки. В error.log регистрируется критическое событие: 1024 worker_connections are not enough while connecting to upstream или worker_connections are not enough.

ПараметрЗначение по умолчаниюВлияние на масштабируемость
worker_processes1 (или auto)Количество рабочих процессов Nginx (по числу ядер CPU)
worker_connections512 или 1024Максимум одновременных файловых дескрипторов на 1 worker
Теоретический предел соединенийworker_processes * worker_connectionsСуммарный лимит одновременных сокетов веб-сервера
Лимит дескрипторов ОС (ulimit -n)1024Системное ограничение открытых файлов на процесс
  • Nginx исчерпывает пул доступных соединений и начинает сбрасывать входящие запросы.
  • При работе в режиме обратного прокси (reverse proxy) на каждый клиентский запрос Nginx тратит 2 соединения (одно к клиенту, второе к upstream-бэкенду).
  1. Откройте глобальный файл конфигурации /etc/nginx/nginx.conf.
  2. В секции events и глобальном контексте увеличьте лимиты соединений и дескрипторов:
    # Запуск воркеров по числу ядер CPU:
    worker_processes auto;
    
    # Максимальное число открытых файлов на воркер на уровне ядра:
    worker_rlimit_nofile 65535;
    
    events {
        # Увеличиваем лимит соединений на один процесс:
        worker_connections 16384;
        # Использовать эффективный механизм мультиплексирования Linux:
        use epoll;
        # Принимать сразу все входящие соединения из очереди:
        multi_accept on;
    }
  3. Увеличьте системные лимиты дескрипторов файлов в /etc/security/limits.conf:
    nginx       soft    nofile   65535
    nginx       hard    nofile   65535
    www-data    soft    nofile   65535
    www-data    hard    nofile   65535
  4. Оптимизируйте сетевой стек ядра Linux через /etc/sysctl.conf:
    sudo sysctl -w net.core.somaxconn=65535
    sudo sysctl -w net.ipv4.tcp_max_syn_backlog=65535
    sudo sysctl -p
  5. Проверьте конфигурацию и примените: sudo nginx -t && sudo systemctl restart nginx.
Важный расчет: При работе Nginx в качестве реверс-прокси максимальное количество одновременных пользователей рассчитывается по формуле: (worker_processes * worker_connections) / 4 (с учетом сокетов к бэкенду, клиенту и дескрипторов файлов логов).
Практический опыт инженера: При большом количестве соединений обязательно включите `keepalive` в блоках `upstream`, иначе Nginx быстро исчерпает диапазон эфемерных портов ядра (`TIME_WAIT` sockets).

Частые вопросы (FAQ)

Почему Nginx тратит 2 или более worker_connections на один запрос?

В режиме reverse proxy одно соединение держится с клиентом (браузером), а второе соединение Nginx открывает к апстриму (например, к PHP-FPM или Gunicorn). Дополнительные дескрипторы могут требоваться для чтения статических файлов и записи логов.

Что произойдет, если указать worker_connections 65535 без worker_rlimit_nofile?

Nginx упадет с ошибкой ядра 'Too many open files', так как стандартный системный ulimit операционной системы для непривилегированного пользователя равен всего 1024 дескрипторам.

Что делает директива multi_accept on?

По умолчанию воркер принимает по одному новому соединению за раз. multi_accept on указывает воркеру забирать сразу все накопившиеся в очереди сетевого сокета входящие подключения за один цикл epoll.

Как проверить текущее количество активных соединений Nginx?

Включите модуль stub_status (location /nginx_status { stub_status; allow 127.0.0.1; deny all; }) и выполните curl http://127.0.0.1/nginx_status.