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