hostprofi.ru
Подобрать хостинг
Термин·буква M

mod_php

краткое определение

mod_php — модуль Apache, встраивающий интерпретатор PHP непосредственно в процессы веб-сервера. Устаревший подход: в 2024 году заменён PHP-FPM + FastCGI на большинстве серверов.

mod_php (официальное название — libphp) — модуль Apache HTTP Server, который загружает интерпретатор PHP напрямую в каждый рабочий процесс (worker) Apache. Запрос к PHP-файлу обрабатывается без создания дочернего процесса: PHP-код выполняется прямо внутри Apache, что исключает накладные расходы на IPC (межпроцессное взаимодействие).

Как работает mod_php

Apache с MPM prefork запускает N рабочих процессов (типично 5–25). Каждый процесс содержит загруженный PHP-интерпретатор. При GET-запросе к index.php Apache передаёт файл встроенному PHP без форка или сетевого взаимодействия. Время обработки — минимально для одиночного запроса.

Проблема — потребление памяти: каждый Apache-процесс с mod_php занимает 20–60 МБ RAM, даже для запросов к статическим файлам (CSS, изображения). При 50 воркерах — 1–3 ГБ RAM только на Apache, независимо от реальной нагрузки. При Apache с mod_php нельзя использовать MPM event — только prefork (один поток на соединение). Это критически ограничивает количество параллельных keepalive-соединений.

Почему mod_php устаревает

  • Несовместимость с MPM event: mod_php работает только с prefork — нельзя использовать асинхронный MPM event с keepalive-оптимизацией. При высокой нагрузке prefork создаёт bottleneck.
  • Нет изоляции между сайтами: все процессы Apache работают от одного системного пользователя; утечка данных между виртуальными хостами возможна через ошибки конфигурации open_basedir.
  • PHP-FPM эффективнее: FastCGI с PHP-FPM и Nginx потребляет меньше RAM; каждый сайт получает отдельный пул с изолированным системным пользователем.
  • Нельзя переключать версии PHP: mod_php привязан к одной версии PHP на весь Apache-инстанс; PHP-FPM позволяет иметь PHP 7.4, 8.1 и 8.3 одновременно для разных сайтов.

История

mod_php появился с ранними версиями PHP 2.0 в 1994–1995 годах и долгое время был стандартом для LAMP (Linux, Apache, MySQL, PHP) хостингов. PHP-FPM (FastCGI Process Manager) разработал Андрей Нигматулин и включил в PHP 5.3 (2009); с PHP 5.4 (2012) FPM стал частью официальной сборки. В PHP 7.0 (2015) PHP-FPM стал де-факто стандартом для продакшн-серверов. К 2020 году большинство хостинг-провайдеров перешли на Nginx + PHP-FPM или Apache + mod_fcgid с PHP-FPM.

mod_php vs PHP-FPM: сравнение

Параметрmod_phpPHP-FPM + Nginx/Apache
RAM на процесс20–60 МБ (с Apache)10–30 МБ (отдельный FPM-процесс)
MPM ApacheТолько preforkevent, worker, prefork
Изоляция сайтовНет (один пользователь)Да (пул на пользователя)
Несколько версий PHPНетДа (разные сокеты FPM)
Совместимость с NginxНетДа
Скорость на одиночных запросахЧуть быстрее (нет IPC)Сопоставимо

На что обращать внимание

На виртуальном хостинге с cPanel старой сборки mod_php ещё встречается. На VPS с Plesk, ISPmanager, DirectAdmin — по умолчанию PHP-FPM. Проверить тип обработчика: apachectl -M | grep php — наличие php_module означает mod_php. Для перехода на PHP-FPM: в Apache заменить php_module на proxy_fcgi_module и настроить пулы PHP-FPM с отдельными unix-сокетами на пользователя. Использование mod_php на сервере с несколькими клиентскими сайтами — потенциальная угроза безопасности.

Другие термины