Что делать, если nginx падает при более чем 1024 одновременных соединениях?

«Что делать, если nginx падает при более чем 1024 одновременных соединениях?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основная причина — исчерпание лимита файловых дескрипторов. Нужно увеличить лимиты на уровне ОС и в конфигурации 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).