Ответ
Основная причина — исчерпание лимита файловых дескрипторов. Нужно увеличить лимиты на уровне ОС и в конфигурации nginx.
1. Проверка текущих лимитов:
# Лимиты для текущей сессии
ulimit -n
# Лимиты для процесса nginx
cat /proc/$(cat /var/run/nginx.pid)/limits | grep 'Max open files'
2. Увеличение лимитов в системе:
Добавить в /etc/security/limits.conf:
nginx soft nofile 65535
nginx hard nofile 65535
* soft nofile 65535
* hard nofile 65535
Для systemd-сервиса (/lib/systemd/system/nginx.service) в секции [Service]:
LimitNOFILE=65535
3. Настройка nginx (nginx.conf):
# Лимит для воркеров nginx
worker_rlimit_nofile 65535;
events {
# Максимум соединений на один воркер
worker_connections 16384;
# Использовать эффективный метод обработки соединений
use epoll;
multi_accept on;
}
4. Настройка сетевых параметров ядра (/etc/sysctl.conf):
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535
Применить: sysctl -p
5. Перезагрузка:
systemctl daemon-reload
systemctl restart nginx
Дополнительно: стоит проверить логи (journalctl -u nginx) на предмет других ошибок и убедиться, что хватает ресурсов (CPU, RAM).