Как настроить максимальное количество подключений в Nginx и PHP-FPM
/ 2 min read
Table of Contents
При росте посещаемости стандартные настройки веб-сервера перестают справляться с нагрузкой. Пользователи получают ошибки 502 Bad Gateway или зависания страниц, потому что сервер исчерпал лимит доступных подключений.
Для масштабирования необходимо увеличить пулы процессов в Nginx и PHP-FPM, а также системные лимиты ОС.
1. Настройка процессов Nginx
Nginx использует рабочие процессы (workers) для обработки запросов. Настройки находятся в /etc/nginx/nginx.conf.
# Автоматически создавать процессы по числу ядер CPUworker_processes auto;
events { # Количество одновременных подключений на один рабочий процесс # По умолчанию часто стоит 768 или 1024. Для нагруженных проектов увеличиваем. worker_connections 4096;
# Метод обработки соединений (эффективен для Linux) use epoll;
# Принимать максимальное количество соединений одновременно multi_accept on;}_Максимальное количество клиентов вычисляется по формуле: worker_processes _ worker_connections.*
2. Настройка пула PHP-FPM
Nginx передает динамические запросы в PHP-FPM. Если Nginx готов принять 4000 подключений, а PHP-FPM может обработать только 50, возникнет «узкое горлышко».
Откройте конфигурацию пула (например, /etc/php/8.3/fpm/pool.d/www.conf):
; Режим динамического выделения процессовpm = dynamic
; Максимальное количество дочерних процессов (лимит одновременных запросов)pm.max_children = 200
; Количество процессов при старте сервераpm.start_servers = 20
; Минимальное количество простаивающих (резервных) процессовpm.min_spare_servers = 10
; Максимальное количество простаивающих процессовpm.max_spare_servers = 30
; Количество запросов, после которых процесс будет перезапущен (защита от утечек памяти)pm.max_requests = 500Важно: Каждый процесс PHP потребляет оперативную память (от 20 до 100+ МБ). Рассчитывайте pm.max_children исходя из свободного объема RAM на сервере.
3. Системные лимиты Linux (File Descriptors)
В Linux каждое сетевое подключение — это открытый файл. Если система имеет жесткий лимит на количество открытых файлов, новые настройки Nginx не сработают.
Проверьте текущий лимит:
ulimit -nЧтобы увеличить лимит, отредактируйте /etc/security/limits.conf:
* soft nofile 65535* hard nofile 65535nginx soft nofile 65535nginx hard nofile 65535Применение настроек
После внесения всех изменений перезапустите службы:
sudo systemctl restart php8.3-fpmsudo systemctl restart nginx