skip to content
Skesov.pro

Как настроить максимальное количество подключений в Nginx и PHP-FPM

/ 2 min read

Table of Contents

При росте посещаемости стандартные настройки веб-сервера перестают справляться с нагрузкой. Пользователи получают ошибки 502 Bad Gateway или зависания страниц, потому что сервер исчерпал лимит доступных подключений.

Для масштабирования необходимо увеличить пулы процессов в Nginx и PHP-FPM, а также системные лимиты ОС.

1. Настройка процессов Nginx

Nginx использует рабочие процессы (workers) для обработки запросов. Настройки находятся в /etc/nginx/nginx.conf.

# Автоматически создавать процессы по числу ядер CPU
worker_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 не сработают.

Проверьте текущий лимит:

Terminal window
ulimit -n

Чтобы увеличить лимит, отредактируйте /etc/security/limits.conf:

* soft nofile 65535
* hard nofile 65535
nginx soft nofile 65535
nginx hard nofile 65535

Применение настроек

После внесения всех изменений перезапустите службы:

Terminal window
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx