Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Адміністрація Віртуальні сервери Хостинг LiteSpeed

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_phpPHP вбудований в ApacheПрості спільні середовища
FastCGIPHP як окремий процесСайти з середнім трафіком
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_phpFastCGIPHP-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.sock

PHP-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 nginx

PHP-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 для отримання експертної допомоги.*