
PHP FPM (FastCGI Process Manager) – это альтернативный способ обработки PHP-скриптов, обеспечивающий лучшую производительность по сравнению с классическим модулем mod_php. Он особенно эффективен при высокой нагрузке и используется в связке с веб-серверами Nginx или Apache (через модуль proxy_fcgi).
Перед установкой убедитесь, что система обновлена: sudo apt update && sudo apt upgrade для Debian-подобных систем или sudo dnf update для дистрибутивов на базе RHEL. Для Ubuntu и Debian установка выполняется командой sudo apt install php-fpm. В CentOS, AlmaLinux и других RPM-системах: sudo dnf install php-fpm.
После установки необходимо включить и запустить службу: sudo systemctl enable php-fpm && sudo systemctl start php-fpm. Проверьте её статус командой systemctl status php-fpm. По умолчанию конфигурационный файл находится в /etc/php/<версия>/fpm/php-fpm.conf или /etc/php-fpm.conf в зависимости от дистрибутива.
Для настройки пула процессов откройте файл www.conf в директории /etc/php/<версия>/fpm/pool.d/. Обратите внимание на параметры listen, pm, pm.max_children, pm.start_servers и pm.max_requests – они напрямую влияют на производительность и потребление ресурсов.
Если PHP FPM используется с Nginx, убедитесь, что в конфигурации сервера указан правильный сокет или порт, например: fastcgi_pass unix:/run/php/php8.2-fpm.sock; или fastcgi_pass 127.0.0.1:9000;. Проверьте права доступа к сокету, чтобы избежать ошибок 502 Bad Gateway.
Проверка текущей версии PHP и наличия FPM в системе
Для проверки установленной версии PHP выполните команду:
php -v
PHP 8.2.6 (cli) (built: May 1 2023 12:00:00) (NTS)
Чтобы убедиться в наличии PHP-FPM, выполните:
php-fpm -v
Если установлен PHP-FPM, вы увидите версию с указанием FPM. Например:
PHP 8.2.6 (fpm-fcgi) (built: May 1 2023 12:00:00)
Если команда php-fpm не найдена, проверьте наличие пакета через системный менеджер пакетов:
Debian/Ubuntu:
dpkg -l | grep php | grep fpm
RHEL/CentOS/AlmaLinux:
rpm -qa | grep php | grep fpm
Также можно проверить запущен ли FPM-сервис:
systemctl status php8.2-fpm
Или, если версия отличается:
systemctl list-units —type=service | grep fpm
В случае отсутствия пакета или сервиса, PHP-FPM не установлен и требует установки соответствующего пакета, например php8.2-fpm.
Установка необходимых репозиториев для получения актуальной версии PHP

В дистрибутивах Debian и Ubuntu штатные репозитории содержат устаревшие версии PHP. Для установки актуального релиза необходимо подключить репозиторий от Sury:
Debian:
Установите необходимые зависимости:
apt update
apt install -y apt-transport-https lsb-release ca-certificates wget gnupg2
Импортируйте ключ и добавьте репозиторий:
wget -qO - https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/sury-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update
Ubuntu:
Установите software-properties-common и подключите PPA:
apt update
apt install -y software-properties-common
add-apt-repository ppa:ondrej/php
apt update
RHEL, CentOS, AlmaLinux, Rocky Linux:
Установите Remi и EPEL репозитории:
dnf install -y epel-release
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E '%rhel')-latest.rpm
dnf module enable -y php:remi-8.2
После подключения репозиториев можно устанавливать нужную версию PHP и PHP-FPM через пакетный менеджер дистрибутива.
Установка PHP-FPM через пакетный менеджер

Перед установкой убедитесь, что система обновлена:
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu
sudo dnf upgrade --refresh -y # Fedora
sudo pacman -Syu # Arch
Для установки PHP-FPM используйте команды, соответствующие вашему дистрибутиву:
| Дистрибутив | Команда установки |
|---|---|
| Debian, Ubuntu | sudo apt install php-fpm |
| Fedora | sudo dnf install php-fpm |
| CentOS 8 / AlmaLinux / RHEL | sudo dnf module enable php:remi-8.2 -y |
| Arch Linux | sudo pacman -S php |
После установки проверьте статус сервиса:
sudo systemctl status php-fpm
Для запуска и включения автозапуска:
sudo systemctl enable --now php-fpm
Конфигурационный файл по умолчанию:
/etc/php/8.2/fpm/php-fpm.conf– Ubuntu, Debian/etc/php-fpm.conf– Fedora, CentOS, RHEL/etc/php/php-fpm.conf– Arch Linux
Пулы находятся в:
/etc/php/8.2/fpm/pool.d/
Проверьте наличие сокета для взаимодействия с веб-сервером:
sudo ss -l | grep php
Настройка пула процессов в конфигурационном файле php-fpm
Конфигурационные файлы пулов находятся в директории /etc/php-fpm.d/ или /etc/php/<версия>/fpm/pool.d/. Каждый файл описывает параметры одного пула. По умолчанию используется файл www.conf.
Для изменения количества процессов укажите параметры:
pm – определяет режим управления процессами. Возможные значения:
- static – фиксированное количество дочерних процессов;
- dynamic – количество процессов изменяется в зависимости от нагрузки;
- ondemand – процессы запускаются по мере необходимости и завершаются при простое.
При использовании pm = dynamic необходимо указать:
pm.max_children – максимальное число процессов. Например: pm.max_children = 20.
pm.start_servers – количество процессов, создаваемых при запуске. Пример: pm.start_servers = 5.
pm.min_spare_servers и pm.max_spare_servers – минимальное и максимальное количество «резервных» процессов. Например: pm.min_spare_servers = 3, pm.max_spare_servers = 10.
Для pm = ondemand настройте:
pm.max_children – как и в других режимах.
pm.process_idle_timeout – время (в секундах), через которое неактивный процесс завершается. Пример: pm.process_idle_timeout = 10s.
Убедитесь, что значения параметров соответствуют возможностям сервера. Например, на сервере с 2 ГБ ОЗУ установка pm.max_children = 50 приведёт к нехватке памяти при высоком трафике. Ориентируйтесь на среднее потребление памяти одним PHP-процессом (обычно от 20 до 50 МБ) при расчёте лимитов.
После внесения изменений перезапустите службу: systemctl restart php-fpm или systemctl restart php<версия>-fpm.
Изменение владельца и прав доступа к сокету php-fpm

Сокет php-fpm по умолчанию создаётся с владельцем и правами, заданными в конфигурационном файле пула. Эти параметры необходимо настроить для обеспечения работы с веб-сервером (например, Nginx) и ограничения доступа.
Откройте файл пула PHP-FPM, обычно расположенный по пути /etc/php/8.1/fpm/pool.d/www.conf (уточните версию PHP):
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
- Проверьте или задайте путь до сокета:
listen = /run/php/php8.1-fpm.sock - Установите владельца и группу сокета:
listen.owner = www-data listen.group = www-data - Задайте права доступа:
listen.mode = 0660
Параметр 0660 означает доступ на чтение и запись для владельца и группы. Если Nginx работает от имени пользователя nginx, укажите соответствующую группу, например:
listen.group = nginx
После внесения изменений перезапустите php-fpm:
sudo systemctl restart php8.1-fpm
Убедитесь, что сокет создан с нужными правами:
ls -l /run/php/php8.1-fpm.sock
При использовании SELinux или AppArmor проверьте контексты и профили, так как они могут блокировать доступ к сокету даже при корректных правах файловой системы.
Интеграция PHP-FPM с Nginx или Apache
Интеграция PHP-FPM с Nginx или Apache позволяет эффективно обрабатывать динамический контент, обеспечивая высокую производительность и гибкость настройки. Рассмотрим особенности настройки для каждой из этих веб-серверов.
Для Nginx необходимо указать PHP-FPM как бэкенд для обработки PHP-запросов. В конфигурации Nginx создается блок для проксирования запросов на PHP-FPM-сервер. Пример настройки:
server {
listen 80;
server_name example.com;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
Здесь fastcgi_pass указывает на адрес PHP-FPM, а fastcgi_param SCRIPT_FILENAME определяет путь к скриптам. Важно удостовериться, что PHP-FPM работает на порту 9000 или другом настроенном порту.
Для Apache настройка PHP-FPM осуществляется с использованием модуля proxy_fcgi>. В файле конфигурации сервера необходимо указать проксирование запросов на PHP-FPM:
DocumentRoot /var/www/html ServerName example.com SetHandler "proxy:fcgi://127.0.0.1:9000"
В этом случае SetHandler "proxy:fcgi://127.0.0.1:9000" указывает, что запросы на файлы с расширением .php будут проксироваться к PHP-FPM через указанный адрес.
При использовании Apache важно убедиться в наличии модулей proxy, proxy_fcgi и setenvif, которые могут быть активированы через a2enmod.
Обе настройки требуют, чтобы PHP-FPM был правильно настроен на сервере, с учетом соответствующих прав и параметров конфигурации в php-fpm.conf и www.conf.
Перезапуск служб и проверка статуса php-fpm

Для перезапуска службы php-fpm на сервере с Linux используется команда:
sudo systemctl restart php-fpm
Если вы используете несколько версий PHP, убедитесь, что указываете правильную версию в названии сервиса, например:
sudo systemctl restart php7.4-fpm
Чтобы проверить текущий статус службы php-fpm, выполните команду:
sudo systemctl status php-fpm
Вы получите информацию о текущем состоянии службы, включая её активность, количество запущенных процессов и возможные ошибки. Для проверки статуса конкретной версии PHP используйте:
sudo systemctl status php7.4-fpm
Если служба не запускается или завершает работу с ошибками, просмотрите журнал с помощью команды:
sudo journalctl -xe | grep php-fpm
Это поможет идентифицировать причины отказа службы. Для более подробной диагностики также можно использовать команду:
sudo systemctl -l status php-fpm
Для перезагрузки конфигурации без остановки службы используйте команду:
sudo systemctl reload php-fpm
Если служба работает некорректно, попробуйте перезапустить её с очисткой кеша сессий PHP:
sudo systemctl restart php-fpm && sudo systemctl restart nginx
Диагностика ошибок при запуске и работе php-fpm

При возникновении проблем с запуском или работой php-fpm, важно точно определить причину. Основные шаги диагностики включают проверку логов, конфигурационных файлов и тестирование различных компонентов системы.
1. Проверка логов php-fpm
Первый шаг – это проверка логов. Обычно ошибки php-fpm можно найти в следующих файлах:
- /var/log/php-fpm.log
- /var/log/syslog
- /var/log/messages
Если в логе php-fpm присутствуют ошибки, то они могут подсказать о проблемах с конфигурацией, правами доступа или ресурсами системы.
2. Ошибки конфигурации
Часто ошибки возникают из-за неправильных настроек в конфигурационных файлах. Проверка следующих параметров может помочь:
userиgroupв файле/etc/php/7.x/fpm/pool.d/www.conf. Убедитесь, что указанные пользователи и группы существуют на сервере.listen– настройте корректный адрес и порт, если используется сокет, проверьте наличие прав на его создание.pm.max_children– значение должно соответствовать возможностям сервера, чтобы избежать переполнения очереди задач.
Для проверки правильности конфигурации используйте команду:
php-fpm -t
3. Проверка прав доступа
Некорректные права доступа могут привести к ошибкам при запуске или работе php-fpm. Убедитесь, что:
- Директория для сокетов имеет правильные права доступа (обычно 755).
- Пользователь, под которым работает php-fpm, имеет права на чтение и запись в нужных каталогах, например, для кеширования.
- Убедитесь, что права доступа к файлам конфигурации соответствуют требованиям безопасности.
4. Проблемы с памятью и ресурсами
В случае перегрузки php-fpm или при недостатке системных ресурсов (например, памяти) наблюдаются сбои. Следующие параметры могут помочь контролировать использование ресурсов:
pm.max_requests– количество запросов, после которого рабочий процесс будет перезапущен. Если приложение генерирует большое количество ошибок, это может предотвратить утечку памяти.- Использование
ulimitдля увеличения лимитов на количество процессов и открытых файлов. - Мониторинг использования памяти с помощью инструментов, таких как
top,htopилиfree.
5. Проверка взаимодействия с сервером web
Ошибки могут возникать из-за некорректной настройки взаимодействия php-fpm с сервером web (например, Nginx или Apache). Важно проверить:
- Настройки в конфигурации сервера для правильного проксирования запросов на php-fpm.
- Наличие ошибок в логах web-сервера, которые могут указывать на неправильные настройки для обработки PHP.
- Использование правильного сокета или порта для связи php-fpm с веб-сервером.
6. Проверка зависимости от других сервисов
Ошибка php-fpm может быть связана с другими сервисами, такими как базы данных или кэш-сервисы. Проверьте:
- Доступность и корректность работы баз данных, на которые ссылается PHP-приложение.
- Конфигурацию кэширования (например, Redis или Memcached), если используется для ускорения работы приложения.
- Настройки файрвола и безопасности, которые могут блокировать связи между php-fpm и другими сервисами.
После выполнения этих шагов вы сможете сузить круг возможных проблем и найти источник ошибки.
Вопрос-ответ:
Что такое PHP-FPM и зачем его устанавливать на сервер с Linux?
PHP-FPM (FastCGI Process Manager) — это альтернатива стандартному модулю PHP для Apache. Он используется для обработки PHP-запросов с более высокой производительностью и гибкостью. На сервере с Linux его обычно устанавливают для оптимизации работы веб-приложений, особенно тех, которые требуют быстрого отклика при высокой нагрузке. PHP-FPM позволяет лучше управлять процессами PHP, конфигурировать их под конкретные задачи и повысить стабильность работы сайтов.
Какие настройки конфигурации важны при установке PHP-FPM?
После установки PHP-FPM стоит настроить файл конфигурации, который находится по пути `/etc/php/7.4/fpm/php-fpm.conf` или аналогичному для вашей версии PHP. Важно указать параметры, связанные с количеством рабочих процессов (например, `pm.max_children`), пределами памяти, а также настройками логирования. В файле `/etc/php/7.4/fpm/pool.d/www.conf` можно настроить параметры для каждого пула процессов, такие как `listen` (адрес сокета), `user` и `group` (пользователь и группа), а также лимиты на ресурсы. Эти настройки помогают сбалансировать нагрузку и улучшить производительность сервера.
Что делать, если PHP-FPM не запускается после установки?
Если PHP-FPM не запускается, следует проверить несколько вещей. Во-первых, посмотрите логи PHP-FPM, которые обычно находятся в каталоге `/var/log/php-fpm.log` или `/var/log/syslog`. Ошибки в этих логах могут указать на проблему, такую как неправильные права доступа, ошибки в конфигурации или недостаток системных ресурсов. Во-вторых, проверьте настройки конфигурации, например, файлы `php-fpm.conf` и `www.conf` на наличие синтаксических ошибок. Если проблема связана с ресурсами, увеличьте лимиты на количество процессов или памяти в конфигурации. После внесения изменений перезапустите PHP-FPM командой `systemctl restart php7.4-fpm`.
