PHP режими на VPS: mod_php vs FastCGI vs PHP-FPM — Повний посібник
PHP живить понад 80% усіх веб-сайтів в інтернеті, проте одне з найбільш недооцінених рішень щодо продуктивності — це вибір правильного режиму виконання PHP. Вибір неправильного режиму призведе до повільного завантаження, надмірного споживання RAM та збоїв сервера при стрибках трафіку. Вибір правильного режиму дозволить вашому додатку масштабуватися без зусиль, навіть під час інтенсивного одночасного навантаження.
Цей посібник розбирає всі три основні режими виконання PHP — mod_php, FastCGI та PHP-FPM — з контекстом реальної продуктивності, прикладами конфігурації та чіткими рекомендаціями для різних випадків використання. Незалежно від того, чи ви керуєте особистим блогом чи високотрафічною платформою електронної комерції, розуміння цих режимів є фундаментальним для максимального використання вашого серверного середовища.
Що таке режими виконання PHP?
Режим виконання PHP визначає, як ваш веб-сервер інтерпретує та запускає скрипти PHP. Він визначає взаємозв’язок між процесом веб-сервера (Apache, Nginx, LiteSpeed) та інтерпретатором PHP — конкретно, чи вони спільно використовують один процес, спілкуються через протокол або працюють як абсолютно окремі керовані сервіси.
Три основних режими:
| Режим | Архітектура | Найкраще для |
|---|---|---|
| mod_php | PHP вбудований в Apache | Прості спільні середовища |
| FastCGI | PHP як окремий процес | Сайти з середнім трафіком |
| PHP-FPM | Керовані пули процесів PHP | Високонавантажені, виробничі додатки |
Вибір правильного режиму безпосередньо впливає на використання пам’яті, пропускну здатність запитів, ізоляцію та масштабованість. У середовищі VPS Hosting, де ресурси виділені та налаштовуються, у вас є повна свобода впровадити будь-який режим, який найкраще підходить для вашого навантаження.
mod_php — класичний модуль Apache
Що таке mod_php?
mod_php — це модуль Apache, який вбудовує інтерпретатор PHP безпосередньо в процес веб-сервера Apache. Це найстаріший і історично найпоширеніший метод запуску PHP.
Як працює mod_php
Коли Apache отримує запит на файл .php, він обробляє виконання внутрішньо — жодний зовнішній процес не створюється, жодна сокет-комунікація не відбувається. PHP живе всередині самого Apache.
Browser Request → Apache (with embedded PHP) → ResponseХарактеристики продуктивності
Для веб-сайтів з низьким трафіком та середовищ розробки mod_php працює задовільно. Оскільки PHP вже завантажений у пам’ять Apache, немає накладних витрат на створення процесу для кожного запиту.
Однак ця архітектура має критичний недолік: кожен робочий процес Apache містить повний інтерпретатор PHP у пам’яті, незалежно від того, обслуговує він PHP-файл чи статичний ресурс, як-от зображення або CSS-файл.
Недоліки mod_php
- Висока споживання пам’яті: Кожен робочий процес Apache (навіть ті, що обслуговують статичні файли) утримує повне PHP-середовище виконання в RAM.
- Відсутність ізоляції за сайтами: Усі віртуальні хости спільно використовують той самий PHP-процес та контекст користувача, що є проблемою безпеки на серверах з кількома орендарями.
- Обмежена гнучкість конфігурації: Ви не можете запускати різні версії PHP для різних віртуальних хостів без значних обходів.
- Несумісний з Nginx:
mod_phpє виключно для Apache; його неможливо використовувати з Nginx або LiteSpeed. - Погана масштабованість під навантаженням: При високій паралельності виснаження пам’яті стає реальним ризиком.
Коли використовувати mod_php
- Локальні середовища розробки
- Особисті сайти з дуже низьким трафіком
- Застарілі додатки, де переналаштування неможливо
FastCGI — Відокремлення PHP від веб-сервера
Що таке FastCGI?
FastCGI — це протокол, який дозволяє веб-серверу спілкуватися з зовнішнім процесом PHP, замість того щоб вбудовувати PHP всередину себе. Це значне архітектурне поліпшення порівняно з mod_php.
Як працює FastCGI
Веб-сервер (Apache або Nginx) передає PHP-запити до постійного процесу FastCGI через Unix-сокет або TCP-порт. Процес PHP обробляє виконання та повертає результат.
Browser Request → Web Server → FastCGI Socket → PHP Process → ResponseКлючове слово тут — постійний: на відміну від CGI (оригінального протоколу), процеси FastCGI залишаються активними між запитами, усуваючи витрати на створення нового процесу для кожного окремого запиту.
Характеристики продуктивності
FastCGI значно зменшує витрати пам’яті порівняно з mod_php тому, що запити статичних файлів обробляються повністю веб-сервером без залучення PHP. Процеси PHP викликаються лише коли це дійсно необхідно.
Недоліки FastCGI
- Складність конфігурації: Вимагає додаткового налаштування порівняно з
mod_php, включаючи конфігурацію сокета або порту. - Обмежене управління процесами: Базовий FastCGI не має розширених функцій управління пулом, необхідних для виробничих середовищ.
- Замінений PHP-FPM: У більшості сучасних розгортань PHP-FPM (який побудований на FastCGI) переважає базові реалізації FastCGI.
Коли використовувати FastCGI
- Веб-сайти з середнім трафіком
- Середовища, де PHP-FPM недоступний
- Перехідні налаштування, які мігрують з
mod_php
PHP-FPM — Сучасний стандарт для високої продуктивності
Що таке PHP-FPM?
PHP-FPM (FastCGI Process Manager) — це передова, багатофункціональна реалізація протоколу FastCGI. Це де-факто стандарт для запуску PHP у виробничих середовищах і рекомендований режим для будь-якого серйозного веб-додатку.
Як працює PHP-FPM
PHP-FPM керує пулом робочих процесів PHP. Веб-сервер передає PHP-запити до PHP-FPM через Unix-сокет або TCP-з’єднання. PHP-FPM динамічно керує кількістю активних робочих процесів на основі поточного трафіку, запускаючи нових робітників під час навантаження та звільняючи їх у спокійні періоди.
Browser Request → Nginx/Apache → Unix Socket → PHP-FPM Pool → PHP Worker → ResponseКлючові переваги PHP-FPM
1. Динамічне управління процесами
PHP-FPM підтримує кілька стратегій управління процесами:
- static: фіксована кількість робочих процесів (передбачувано, добре для високого трафіку)
- dynamic: робітники масштабуються між мінімумом і максимумом залежно від попиту
- ondemand: робітники породжуються тільки коли надходять запити (ефективно за пам’яттю для низького трафіку)
2. Конфігурація для кожного пула
Кожен додаток або віртуальний хост може мати власний пул PHP-FPM з незалежними налаштуваннями:
- Окремий користувач/група Unix (покращена ізоляція безпеки)
- Різна версія PHP для кожного пула
- Користувацькі значення
php.iniдля кожного додатку - Окремі обмеження ресурсів
3. Логування повільних запитів
PHP-FPM може логувати запити, які перевищують визначений поріг часу виконання, що є неоціненним для виявлення вузьких місць продуктивності.
4. Ефективність ресурсів
Оскільки процеси PHP керуються окремо від веб-сервера, статичні ресурси обслуговуються без будь-яких витрат PHP. Пам’ять споживається тільки активними робочими процесами PHP.
5. Сумісність
PHP-FPM безперебійно працює з Nginx, Apache (через mod_proxy_fcgi) та LiteSpeed. При поєднанні з Nginx або LiteSpeed прибутки продуктивності суттєві — часто цитуються як 5–10x швидше під час одночасного навантаження порівняно з mod_php з Apache.
Порівняння поруч
| Функція | mod_php | FastCGI | PHP-FPM |
|---|---|---|---|
| Архітектура | Вбудовано в Apache | Зовнішній процес | Керований пул процесів |
| Ефективність пам’яті | Низька | Середня | Висока |
| Навантаження статичних файлів | Високе | Низьке | Низьке |
| Обробка одночасних запитів | Слабка | Хороша | Відмінна |
| PHP версія для кожного сайту | Ні | Обмежено | Так |
| Ізоляція безпеки | Слабка | Середня | Відмінна |
| Сумісність з Nginx | Ні | Так | Так |
| Складність конфігурації | Низька | Середня | Середня |
| Готовність до виробництва | Ні | Частково | Так |
| Логування повільних запитів | Ні | Ні | Так |
Як налаштувати PHP-FPM на VPS (Ubuntu/Debian)
Наступні інструкції застосовуються до Ubuntu 22.04 LTS та Debian 11/12. Якщо ви запускаєте свій додаток на плані VPS Hosting, у вас буде повний root-доступ для виконання цих команд.
Крок 1: Оновіть систему та встановіть PHP-FPM
sudo apt update && sudo apt upgrade -y
sudo apt install php-fpm -yЩоб встановити конкретну версію PHP (наприклад, PHP 8.2):
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2-fpm -yКрок 2: Перевірте, чи запущено PHP-FPM
sudo systemctl status php8.2-fpmВи повинні побачити active (running) у виводі. Якщо ні, запустіть та увімкніть його:
sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpmКрок 3: Підтвердіть шлях до сокета
PHP-FPM взаємодіє через Unix сокет. Перевірте його розташування:
ls /var/run/php/
# Expected output: php8.2-fpm.sockPHP-FPM з Nginx
Nginx — найпоширеніший веб-сервер, який використовується разом з PHP-FPM, і це не випадково — архітектура Nginx на основі подій без блокування ідеально доповнює модель пулу процесів PHP-FPM.
Встановлення Nginx
sudo apt install nginx -yНалаштування блоку сервера Nginx
Відредагуйте файл конфігурації вашого сайту:
sudo nano /etc/nginx/sites-available/yourdomain.comДодайте наступну конфігурацію:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/public;
index index.php index.html index.htm;
# Handle PHP files
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Deny access to .htaccess files
location ~ /.ht {
deny all;
}
# Serve static files directly
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}Активація сайту та перезавантаження Nginx
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxPHP-FPM з Apache
Якщо ви віддаєте перевагу Apache — або якщо ваша програма залежить від .htaccess файлів — ви все ще можете використовувати PHP-FPM через модуль mod_proxy_fcgi Apache.
Увімкніть необхідні модулі Apache
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpmНалаштуйте віртуальний хост Apache
sudo nano /etc/apache2/sites-available/yourdomain.com.conf<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/yourdomain.com/public
<Directory /var/www/yourdomain.com/public>
AllowOverride All
Require all granted
</Directory>
# Route PHP requests to PHP-FPM
<FilesMatch .php$>
SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/yourdomain_error.log
CustomLog ${APACHE_LOG_DIR}/yourdomain_access.log combined
</VirtualHost>Увімкніть сайт і перезавантажте Apache
sudo a2ensite yourdomain.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2Налаштування PHP-FPM Pool для Production
Конфігурація пула PHP-FPM за замовчуванням є консервативною та придатною для розробки. Для виробничих навантажень вам слід налаштувати параметри пула на основі доступної RAM вашого сервера та очікуваного трафіку.
Знайдіть файл конфігурації пула
sudo nano /etc/php/8.2/fpm/pool.d/www.confКлючові параметри для налаштування
; Process management mode: static, dynamic, or ondemand
pm = dynamic
; Maximum number of child processes
pm.max_children = 50
; Number of processes started on boot
pm.start_servers = 10
; Minimum idle processes
pm.min_spare_servers = 5
; Maximum idle processes
pm.max_spare_servers = 20
; Requests per child before recycling (prevents memory leaks)
pm.max_requests = 500
; Log slow requests (requests taking longer than 5 seconds)
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.logРозрахунок pm.max_children
Практична формула для динамічних середовищ:
pm.max_children = (Available RAM in MB) / (Average PHP process size in MB)Щоб знайти середній розмір процесу PHP:
ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf "%.0f MBn", sum/NR/1024 }'На типовому сайті WordPress кожен робітник PHP-FPM споживає приблизно 30–60 МБ. На VPS з 2 GB RAM (залишаючи ~1,5 GB для PHP після накладних витрат ОС), ви можете безпечно запустити 25–50 робітників.
Застосуйте зміни
sudo systemctl reload php8.2-fpmЯкий режим PHP вам вибрати?
Ось практичний посібник для прийняття рішення:
Виберіть mod_php, якщо:
- Ви запускаєте локальне середовище розробки
- У вас дуже простий сайт з низьким трафіком та статичним контентом
- Ви на застарілому спільному хостингу без інших варіантів
Виберіть FastCGI, якщо:
- Ви на сайті з середнім трафіком, а PHP-FPM недоступний
- Ви мігруєте від
mod_phpі потребуєте проміжного кроку
Виберіть PHP-FPM, якщо:
- Ви запускаєте будь-яке виробниче застосування
- Вам потрібна підтримка кількох версій PHP на одному сервері
- Ви запускаєте WordPress, Laravel, Symfony, Magento або будь-який сучасний PHP фреймворк
- Вам потрібна ізоляція безпеки для кожного застосування
- Ви використовуєте Nginx (PHP-FPM — єдиний життєздатний варіант)
- Вам потрібна масштабованість під час одночасного трафіку
Для переважної більшості виробничих випадків використання PHP-FPM — явний переможець. Це стандартна конфігурація на сучасних керованих платформах хостингу, і це те, що ви повинні запускати на будь-якому самокерованому VPS.
Якщо ви керуєте кількома веб-сайтами і хочете графічного інтерфейсу для перемикання режиму PHP, управління пулами процесів та конфігурацією віртуальних хостів без ручного редагування файлів конфігурації, розгляньте VPS з cPanel — EasyApache 4 cPanel дозволяє вам перемикати обробники PHP для кожного домену кількома клацаннями.
Крім того, дослідіть повний спектр панелей керування VPS, щоб знайти інтерфейс управління, який найкраще відповідає вашому робочому процесу.
Захист вашої PHP-програми за межами режиму виконання
Вибір правильного режиму виконання PHP — це лише один рівень вашої стратегії безпеки та продуктивності сервера. Ось додаткові міркування:
SSL/TLS шифрування
Кожна виробнича PHP-програма повинна обслуговуватися через HTTPS. Незашифрований сайт розкриває дані користувачів і займає нижче місце в результатах пошуку Google. Ви можете захистити свій домен надійним SSL сертифікатом, щоб увімкнути HTTPS та захистити своїх відвідувачів.
Виділені ресурси для програм з високим трафіком
Якщо ваша PHP-програма постійно обробляє тисячі одночасних користувачів, спільний або VPS початкового рівня можуть в кінцевому підсумку стати вузьким місцем. Виділені сервери забезпечують гарантовані CPU, RAM та NVMe сховище без конкуренції за ресурси — ідеально для високопродуктивних PHP-програм, що працюють на PHP-FPM у масштабі.
Посилення конфігурації PHP
Крім режиму виконання, посиліть вашу установку PHP:
; Disable dangerous functions
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
; Hide PHP version from HTTP headers
expose_php = Off
; Restrict file access
open_basedir = /var/www/yourdomain.com/
; Set reasonable limits
memory_limit = 256M
max_execution_time = 30
upload_max_filesize = 20MВисновок
Розуміння різниць між mod_php, FastCGI та PHP-FPM — це не просто академічна вправа — це має прямі, вимірювані наслідки для продуктивності, безпеки та масштабованості вашого додатку.
Підсумовуючи:
- mod_php простий, але ресурсомісткий, тісно пов’язаний з Apache і непридатний для виробництва.
- FastCGI відокремлює PHP від веб-сервера та підвищує ефективність, але не має розширених функцій управління.
- PHP-FPM — це сучасний, виробничий стандарт — пропонує динамічне управління процесами, ізоляцію за пулами, підтримку кількох версій та відмінну продуктивність під час одночасного навантаження.
Для будь-якого серйозного веб-додатку PHP-FPM у парі з Nginx (або LiteSpeed) — це конфігурація, яку ви повинні запускати. У поєднанні з належним налаштуванням пула, посиленням безпеки PHP та примусовим HTTPS це формує основу надійного, масштабованого середовища хостингу PHP.
Якщо ви готові розгорнути PHP-додаток з повним контролем над вашим середовищем виконання, VPS Hosting від AlexHost надає вам root-доступ, сховище NVMe та захист від DDoS, які вам потрібні для впровадження всього, що розглядається в цьому посібнику — з першого дня.
*Маєте запитання щодо налаштування PHP-FPM на вашому сервері? Залиште коментар нижче або зв’яжіться з командою підтримки AlexHost для отримання експертної допомоги.*
на всіх хостингових послугах