Skip to content
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 — прямий шлях до втрати всіх баз даних одразу.