Как использовать PHP-FPM с поддержкой multiple pools в WordPress для повышения производительности

PHP-FPM (FastCGI Process Manager) — это современный способ обработки PHP-запросов, который значительно повышает производительность сайтов на WordPress, особенно при большом трафике. В статье рассмотрим, как правильно настроить PHP-FPM с несколькими пулами (multiple pools) для управления разными сайтами или частями сайта, а также как интегрировать это с веб-серверами Nginx и Apache.

Что такое PHP-FPM и multiple pools

PHP-FPM — это менеджер процессов PHP, который запускает пул рабочих процессов для обработки входящих запросов. В отличие от традиционного mod_php, PHP-FPM позволяет гибко управлять ресурсами, быстрее обрабатывать запросы и снижать нагрузку на сервер.

Multiple pools — это возможность создавать несколько отдельных пулов процессов PHP-FPM, каждый из которых может работать под своим пользователем, с разными настройками и ограничениями. Это особенно полезно в средах, где на одном сервере размещается несколько сайтов или проектов.

Для WordPress такая настройка позволяет изолировать ресурсы разных сайтов, повышая безопасность и стабильность.

Преимущества использования multiple pools в WordPress

1. Изоляция ресурсов: Каждый сайт работает в своем пуле с отдельным пользователем и настройками, что снижает риски безопасности и позволяет управлять лимитами памяти, процессами и временем выполнения отдельно.

2. Гибкость конфигурации: Можно настраивать разные параметры для сайтов с высокой и низкой нагрузкой.

3. Улучшенная производительность: Оптимизация под конкретные задачи и нагрузки позволяет снизить время отклика и повысить устойчивость сервера.

Настройка multiple pools PHP-FPM для WordPress на примере

Рассмотрим пример конфигурации для 2 сайтов на одном сервере с использованием PHP-FPM и Nginx.

Шаг 1. Создаем пользователей для сайтов

Для изоляции создадим отдельных пользователей:

sudo adduser wpuser1
sudo adduser wpuser2

Шаг 2. Создаем конфигурации пулов

Конфигурационные файлы PHP-FPM обычно находятся в каталоге /etc/php/8.1/fpm/pool.d/ (версия PHP может отличаться).

Создадим файлы wpuser1.conf и wpuser2.conf с содержимым:

[wpuser1]
user = wpuser1
group = wpuser1
listen = /run/php/php8.1-fpm-wpuser1.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
chdir = /

[wpuser2]
user = wpuser2
group = wpuser2
listen = /run/php/php8.1-fpm-wpuser2.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
chdir = /

Здесь каждый пул слушает на своем Unix-сокете, что позволяет Nginx или Apache направлять запросы на нужный пул.

Шаг 3. Настройка Nginx для работы с несколькими пулами

Для каждого сайта в конфигурации Nginx укажем соответствующий сокет PHP-FPM:

server {
    server_name site1.example.com;
    root /var/www/site1;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm-wpuser1.sock;
    }
}

server {
    server_name site2.example.com;
    root /var/www/site2;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm-wpuser2.sock;
    }
}

Шаг 4. Права на файлы и папки

Важно, чтобы файлы WordPress были доступны соответствующим пользователям пула. Для этого устанавливаем владельцев и права:

sudo chown -R wpuser1:wpuser1 /var/www/site1
sudo chown -R wpuser2:wpuser2 /var/www/site2

Это обеспечит изоляцию и безопасность.

Настройка с Apache и PHP-FPM

Если вы используете Apache, то можно настроить proxy_fcgi для каждого виртуального хоста.

<VirtualHost *:80>
    ServerName site1.example.com
    DocumentRoot /var/www/site1

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.1-fpm-wpuser1.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.example.com
    DocumentRoot /var/www/site2

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.1-fpm-wpuser2.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

Это позволит Apache направлять PHP-запросы в нужный пул PHP-FPM.

Пример функции для wp-host.ru: автоматическое переключение пула PHP-FPM для мультисайта

Если у вас мультисайт WordPress и вы хотите динамически выбирать пул PHP-FPM, можно использовать фильтр для определения сокета. Приведем пример функции на PHP:

function wp_host_fpm_pool_for_site( $socket ) {
    $site_id = get_current_blog_id();
    switch ( $site_id ) {
        case 1:
            return '/run/php/php8.1-fpm-wpuser1.sock';
        case 2:
            return '/run/php/php8.1-fpm-wpuser2.sock';
        default:
            return $socket;
    }
}
<

Далее эту логику можно интегрировать в конфигурацию или добавить в кастомный плагин для управления запросами.

Рекомендации по мониторингу и отладке

После настройки multiple pools важно следить за их состоянием. Используйте команды:

  • systemctl status php8.1-fpm — проверка статуса сервиса;
  • php-fpm8.1 -tt — тест конфигурации;
  • tail -f /var/log/php8.1-fpm.log — просмотр логов ошибок.

Для мониторинга нагрузки используйте инструменты, например, htop или специализированные сервисы.

Дополнительные плагины для оптимизации PHP-FPM на WordPress

Хотя PHP-FPM работает на уровне сервера, некоторые плагины могут помочь в совместной оптимизации:

  • Clearfy Pro — оптимизация производительности и безопасности;
  • WPRemark — управление комментариями и кешем;
  • ABC Pagination — улучшение навигации и скорости загрузки.

Использование таких инструментов совместно с PHP-FPM multiple pools обеспечит комплексную оптимизацию WordPress.

Как создать автоматический отчет о производительности WordPress с помощью кода и плагинов
02.02.2026
Как разрешить доступ к WordPress по IP адресу
21.12.2025
Как отладить и исправить проблемы с отправкой писем из WordPress через SMTP
27.05.2026
Как удалить неиспользуемые плагины WordPress без рисков
01.12.2025
Как создать собственное событие для AJAX в WordPress с примерами кода
16.01.2026