Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
LiteSpeed VPS Администрация

PHP Modes на 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 runtime в оперативной памяти.
  • Отсутствие изоляции по сайтам: все виртуальные хосты используют один и тот же процесс 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 в production-среде и рекомендуемый режим для любого серьезного веб-приложения.

Как работает 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 через модуль Apache mod_proxy_fcgi.

Включить требуемые модули 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 pool по умолчанию консервативна и подходит для разработки. Для production нагрузок вы должны настроить параметры pool на основе доступной RAM вашего сервера и ожидаемого трафика.

Найдите файл конфигурации Pool

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 worker потребляет примерно 30–60 MB. На VPS с 2 GB RAM (оставляя ~1.5 GB для PHP после накладных расходов OS), вы можете безопасно запустить 25–50 workers.

Применить изменения

sudo systemctl reload php8.2-fpm

Какой режим PHP выбрать?

Вот практическое руководство по выбору:

Выберите mod_php если:

  • Вы используете локальную среду разработки
  • У вас очень простой сайт с низким трафиком и статическим контентом
  • Вы на устаревшем общем хостинге без других вариантов

Выберите FastCGI если:

  • Вы на сайте со средним трафиком и PHP-FPM недоступен
  • Вы переходите с mod_php и нужен промежуточный этап

Выберите PHP-FPM если:

  • Вы запускаете любое production приложение
  • Вам нужна поддержка нескольких версий PHP на одном сервере
  • Вы запускаете WordPress, Laravel, Symfony, Magento или любой современный PHP фреймворк
  • Вам нужна изоляция безопасности для каждого приложения
  • Вы используете Nginx (PHP-FPM — единственный жизнеспособный вариант)
  • Вам нужна масштабируемость при одновременном трафике

Для подавляющего большинства production случаев PHP-FPM — явный победитель. Это стандартная конфигурация на современных управляемых хостинг-платформах, и это то, что вы должны использовать на любом самоуправляемом VPS.

Если вы управляете несколькими веб-сайтами и хотите графический интерфейс для переключения режимов PHP, управления пулами процессов и конфигурацией виртуальных хостов без ручного редактирования файлов конфигурации, рассмотрите VPS с cPanel — EasyApache 4 cPanel позволяет переключать обработчики PHP для каждого домена несколькими щелчками.

Кроме того, изучите полный спектр VPS Control Panels, доступных для поиска интерфейса управления, который лучше всего подходит для вашего рабочего процесса.

Защита вашего 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 и не подходит для production.
  • FastCGI отделяет PHP от веб-сервера и повышает эффективность, но не имеет продвинутых функций управления.
  • PHP-FPM — это современный стандарт production-уровня, предлагающий динамическое управление процессами, изоляцию пулов, поддержку нескольких версий и отличную производительность при одновременной нагрузке.

Для любого серьезного веб-приложения PHP-FPM в паре с Nginx (или LiteSpeed) — это конфигурация, которую вы должны использовать. В сочетании с правильной настройкой пулов, усилением безопасности PHP и принудительным использованием HTTPS это формирует основу надежной и масштабируемой среды PHP-хостинга.

Если вы готовы развернуть PHP-приложение с полным контролем над средой выполнения, VPS Hosting от AlexHost предоставляет вам root-доступ, хранилище NVMe и защиту от DDoS, необходимые для реализации всего, что описано в этом руководстве — с первого дня.

*Есть вопросы о настройке PHP-FPM на вашем сервере? Оставьте комментарий ниже или свяжитесь с командой поддержки AlexHost для получения квалифицированной помощи.*