PHP-FPM: сайты на PHP
Установка PHP-FPM на VDS, связка с Nginx, подбор числа процессов под память вашей ступени и разбор ошибок 502 и 504.
Обновлено 23 августа 2026 г.
PHP-FPM — отдельная служба, которая исполняет PHP-код; веб-сервер только передаёт ей запросы. Так работают WordPress, Laravel, Bitrix и почти всё остальное на PHP.
Установка
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
В AlmaLinux и CentOS Stream — dnf install -y php-fpm php-mysqlnd ..., служба называется php-fpm. Точную версию посмотрите так:
php -v
systemctl list-units | grep fpm
Связка с Nginx
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
Откройте /info.php, убедитесь, что PHP работает, и сразу удалите этот файл: он раскрывает версию, пути и список модулей.
Сколько процессов держать
Каждый рабочий процесс PHP съедает 40–120 МБ. Считайте по ступени, оставляя память базе и системе. Правится в /etc/php/8.3/fpm/pool.d/www.conf:
| Ступень | Память | Разумный pm.max_children |
|---|---|---|
| VDS-1 | 2 ГБ | 5 |
| VDS-2 | 4 ГБ | 10 |
| VDS-3 | 8 ГБ | 20 |
| VDS-5 | 24 ГБ | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
pm.max_requests перезапускает процесс после N запросов — так утечки памяти в коде не копятся до конца недели.
Полезные значения в php.ini для FPM: memory_limit = 256M, upload_max_filesize = 64M, post_max_size = 64M, opcache.enable = 1.
После правок: systemctl reload php8.3-fpm.
Частые ошибки
| Симптом | Причина | Что делать |
|---|---|---|
502 Bad Gateway | Неверный путь к сокету или служба не запущена | Сверьте fastcgi_pass с реальным файлом в /run/php/ |
504 Gateway Time-out | Скрипт дольше таймаута | Поднимите fastcgi_read_timeout и max_execution_time |
| Браузер скачивает файл вместо исполнения | Не сработал блок location ~ \.php$ | Проверьте порядок location и nginx -t |
server reached pm.max_children в логе | Не хватает процессов | Поднимите лимит, если позволяет память, иначе — ступень выше |
Логи: /var/log/php8.3-fpm.log и /var/log/nginx/error.log.
Базу для сайта заводите отдельным пользователем с правами только на свою схему — пользователи и права. Учётка
rootв конфиге CMS — прямой путь к потере всех баз разом.