Миграция Apache с MPM Prefork на производительный MPM Event + PHP-FPM
- Высокое потребление памяти каждым процессом Apache (от 50 до 150 MB на соединение из-за встроенного
mod_php). - Невозможность использовать HTTP/2 в Apache (требует потокобезопасного MPM Event или MPM Worker).
- Падение производительности веб-сервера при конкурентных запросах.
1. Установка PHP-FPM и модулей Apache
# Ubuntu / Debian
apt-get update
apt-get install -y php-fpm libapache2-mod-fcgid2. Отключение устаревших модулей mod_php и mpm_prefork
# Отключение версионного mod_php (например, php8.1)
a2dismod php8.1
a2dismod php8.2
a2dismod mpm_prefork3. Активация MPM Event, HTTP/2 и модулей проксирования FastCGI
a2enmod mpm_event
a2enmod proxy
a2enmod proxy_fcgi
a2enmod setenvif
a2enmod http24. Настройка конфигурации PHP-FPM для VirtualHost
Добавьте директиву в /etc/apache2/sites-available/000-default.conf:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
Protocols h2 http/1.1
# Проксирование PHP скриптов на unix-сокет
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>5. Проверка синтаксиса и перезапуск сервисов
apachectl configtest
systemctl restart php*-fpm
systemctl restart apache2 Частые вопросы (FAQ)
Почему mod_php несовместим с MPM Event?
Встроенный интерпретатор mod_php и многие расширения PHP (C-расширения) не являются потокобезопасными (Non-Thread-Safe). В многопоточной среде MPM Event это приводит к деградации памяти и сбоям Segmentation Fault.
Как проверить, какой MPM модуль активен в Apache сейчас?
Выполните команду apachectl -V | grep -i mpm или apachectl -M | grep mpm. Должна отображаться строка mpm_event_module (shared).