Перейти к содержимому
VDS · Сайты и веб-серверы

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-12 ГБ5
VDS-24 ГБ10
VDS-38 ГБ20
VDS-524 ГБ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 — прямой путь к потере всех баз разом.