Назад к блогу
13 января 2026Руководства

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

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

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

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

Установка PHP-FPM

bash
# Ubuntu/Debian
sudo apt update
sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl -y

# CentOS/RHEL
sudo yum install php-fpm php-mysql php-mbstring php-xml php-curl -y

# Запуск и включение PHP-FPM
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

Настройка пула PHP-FPM

Отредактируйте файл конфигурации пула для оптимизации производительности:

bash
sudo nano /etc/php/8.1/fpm/pool.d/www.conf

# Ключевые настройки:
user = www-data
group = www-data
listen = /run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data

# Управление процессами
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500

Настройка производительности

Оптимизируйте PHP-FPM под ресурсы вашего сервера:

bash
# Рассчитайте оптимальный max_children:
# (Общая RAM - Другие службы) / (Память на PHP процесс)
# Пример: (2GB - 500MB) / 50MB = 30 max_children

# Отредактируйте php.ini для лучшей производительности
sudo nano /etc/php/8.1/fpm/php.ini

# Рекомендуемые настройки:
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M

# Перезапустите PHP-FPM
sudo systemctl restart php-fpm

Конфигурация Nginx

Настройте Nginx для работы с PHP-FPM:

bash
sudo nano /etc/nginx/sites-available/yourdomain.com

# Добавьте обработку PHP:
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

# Проверьте и перезагрузите Nginx
sudo nginx -t
sudo systemctl reload nginx

Мониторинг PHP-FPM

bash
# Проверка статуса PHP-FPM
sudo systemctl status php-fpm

# Просмотр процессов PHP-FPM
ps aux | grep php-fpm

# Проверка статуса пула (если страница статуса включена)
curl http://localhost/status

# Просмотр логов
sudo tail -f /var/log/php8.1-fpm.log

Советы по оптимизации PHP-FPM

  • Настройте pm.max_children в зависимости от доступной RAM
  • Используйте pm = dynamic для большинства случаев
  • Установите pm.max_requests для предотвращения утечек памяти
  • Включите opcache для лучшей производительности
  • Регулярно мониторьте статус PHP-FPM
  • Используйте отдельные пулы для разных приложений
  • Держите PHP и PHP-FPM обновленными