- Вопрос или проблема
- Ответ или решение
- Включение MPM event в Apache 2.4 на Ubuntu 14.04 с потокобезопасным PHP
- 1. Начальное состояние вашей системы
- 2. Установка необходимых компонентов
- 3. Отключение старого модульного управления
- 4. Настройка PHP-FPM
- 5. Настройка Apache для работы с PHP-FPM
- 6. Перезапуск служб
- 7. Проверка конфигурации
- 8. Дополнительные советы
Вопрос или проблема
Я обновился до 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. Если вы выполните все шаги, ваше серверное окружение будет работать с оптимальной производительностью.