Как включить событийный MPM Apache 2.4 на Ubuntu 14.04 с потокобезопасным PHP?

Вопрос или проблема

Я обновился до Ubuntu server 14.04, ожидая, что стандартная установка Apache будет использовать новый event MPM, но вместо этого я обнаружил старый, жадный к памяти prefork.

Я успешно настроил event MPM в Arch Linux, но у меня не получается сделать это на Ubuntu. Я продолжаю получать:

Apache работает с многопоточным MPM, но ваш модуль PHP не скомпилирован для работы в многопоточной среде. Вам нужно перекомпилировать PHP.

Я уже установил php-fpm и настроил Apache2 для его использования, но так как конфигурационные файлы для Apache2 на Ubuntu отличаются, я не уверен, делаю ли я это в нужном месте.

Есть идеи, как сделать PHP безопасным для потоков, чтобы я мог использовать Apache2 “event MPM”; без необходимости вручную перекомпилировать PHP, конечно?

Здесь немного спекуляций, но я предполагаю, что поскольку вы обновились, а не сделали чистую установку, ваша старая конфигурация Apache (включая включенные модули) осталась нетронутой, как это обычно и бывает. В чистой установке 14.04 LTS event MPM является стандартом:

foo@CHANGEME-U14LTS:~$ ls /etc/apache2/mods-enabled/|grep mpm
mpm_event.conf
mpm_event.load

Ваша проблема с PHP, вероятно, возникает из-за подобных проблем обновления на месте. Выполнение шагов здесь на той же чистой установке оказалось достаточным для запуска PHP-FPM на моем тестовом компьютере.

Чтобы исключить очевидное, вы помните, что отключили mod_php в вашей конфигурации Apache… верно? Mod_php в Ubuntu не скомпилирован с поддержкой потоков; и если у вас все еще загружается mpm-prefork, есть большая вероятность, что он также остался. В любом случае, я бы настоятельно рекомендовал перенести ваш статический веб-контент на чистую установку 14.04, если вы не хотите разбираться с отключением всего старого хлама и настраивать все новые лучшие практики самостоятельно.

Ответ или решение

Включение MPM event в Apache 2.4 на Ubuntu 14.04 с потокобезопасным PHP

Если вы перешли на Ubuntu 14.04 и хотите использовать новый модуль обработки событий (event MPM) Apache, но столкнулись с проблемами, связанными с потокобезопасностью PHP, следуйте приведенным ниже рекомендациям.

1. Начальное состояние вашей системы

Первоначально, после обновления до Ubuntu 14.04, вы могли заметить, что по умолчанию включен модуль mpm_prefork, который не является оптимальным для многопоточных приложений, таких как PHP-FPM. Ваша цель — перейти на mpm_event, который более эффективно управляет большим количеством соединений.

2. Установка необходимых компонентов

Для начала убедитесь, что у вас установлены необходимые пакеты:

sudo apt-get update
sudo apt-get install apache2 libapache2-mod-fcgid php5-fpm

3. Отключение старого модульного управления

Отключите mod_php и модуль mpm_prefork, если они еще включены. Выполните следующие команды:

sudo a2dismod mpm_prefork
sudo a2dismod php5

Проверьте, что у вас включен модуль mpm_event:

sudo a2enmod mpm_event
sudo a2enmod proxy
sudo a2enmod proxy_fcgi

4. Настройка PHP-FPM

Теперь следует настроить PHP-FPM. Откройте файл конфигурации для вашей версии PHP, который обычно находится по пути /etc/php5/fpm/pool.d/www.conf. Убедитесь, что настройки соответствуют вашим ожиданиям.

5. Настройка Apache для работы с PHP-FPM

Создайте или измените конфигурацию виртуального хоста, чтобы подключить Apache к PHP-FPM. Это можно сделать в файле /etc/apache2/sites-available/000-default.conf, добавив следующие строки для конфигурации FastCGI:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        AllowOverride All
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php5-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

6. Перезапуск служб

После всех изменений перезапустите службы Apache и PHP-FPM для применения новых настроек:

sudo service php5-fpm restart
sudo service apache2 restart

7. Проверка конфигурации

Чтобы убедиться, что конфигурация была применена правильно и вы используете event MPM, выполните команду:

apache2ctl -M | grep mpm

Если все сделано правильно, ответ должен содержать mpm_event_module.

8. Дополнительные советы

  • Логи ошибок: Если вы все еще видите сообщения об ошибках, проверьте логи Apache по пути /var/log/apache2/error.log для получения дополнительной информации.

  • PHP без необходимости перекомпиляции: Следует отметить, что использование php-fpm позволяет избежать необходимости перекомпиляции PHP, обеспечивая при этом хорошую производительность и потокобезопасность.

Подводя итог, настройка Apache с использованием потоко-безопасного PHP через PHP-FPM позволяет улучшить многопоточную обработку ваших веб-приложений. Это требует отключения устаревших модулей и настройки виртуального хоста под FastCGI. Если вы выполните все шаги, ваше серверное окружение будет работать с оптимальной производительностью.

Оцените материал
Добавить комментарий

Капча загружается...