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_php | PHP-FPM + Nginx/Apache |
|---|---|---|
| RAM на процесс | 20–60 МБ (с Apache) | 10–30 МБ (отдельный FPM-процесс) |
| MPM Apache | Только prefork | event, 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 на сервере с несколькими клиентскими сайтами — потенциальная угроза безопасности.