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

25

Я обновился до Ubuntu Server 14.04, ожидая, что установка apache по умолчанию будет использовать новое событие MPM, но вместо этого я нахожу старый преформ, потребляющий память.

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

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP

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

Любая идея о том, как сделать PHP поток безопасным, чтобы я мог использовать apache2 event-mpm? (без необходимости вручную перекомпилировать php, конечно)

Towerman
источник

Ответы:

39

Чтобы отключить event MPM, вы можете сделать, sudo a2dismod mpm_eventа после этого, чтобы включить prefork, вы должны сделать sudo a2enmod mpm_prefork.

Наконец перезапустите Apache:

sudo service apache2 restart
Mehraban
источник
3
Вы должны быть там ... Не здесь ... там ... в верхней части списка ответов.
Карма
2
Это должен быть принятый ответ! Не забудьте перезапустить Apache после этого:sudo service apache2 restart
Reeno
4
Как это отвечает на вопрос о том, как включить MPM, как задано OP? Вы объясняете, как сделать противоположное тому, о чем просил ОП.
Крейг
2
@Mehraban, OP спросил слово в слово «Как включить событие MPM?», А ваш ответ «Просто отключить событие MPM». Как это приемлемый ответ?
Николас Булиан
1
@Mehraban Это не тот вопрос, который был задан, поэтому весь трафик, приходящий сюда от Google, получает сообщение «лучший способ сделать X - это не делать с X». Если я спрашиваю, как сделать шоколадное печенье, я ожидаю рецепт шоколадного печенья.
Николас Булиан,
13

Это сработало для меня.

Сначала проверьте, установлен ли этот пакет:

dpkg -l | grep libapache2-mod-php5

Если он у вас есть, просто удалите его:

apt-get remove libapache2-mod-php5
Карлос Мафла
источник
Это правильный ответ!
DrSvanHay
6

Вы можете установить несколько способов Apache для параллельного взаимодействия с PHP. Может быть, у вас (все еще) установлен старый mod_php, в дополнение к fastcgi / php-fpm.

Вы можете увидеть, какие модули ваш Apache загрузил во время выполнения с

apache2ctl -M

При необходимости используйте sudoдля получения привилегий root. Если вы видите php5_module (shared)среди модулей, которые ваш Apache использует в настоящее время, старый mod_php все еще установлен и не позволяет использовать mpm_workerили mpm_event.

Хеннинг Кокербек
источник
5
Не могу запустить это, чтобы получить моды, если сервер не запускается, попробуйте sudo a2dismodдважды нажать на символ табуляции, чтобы увидеть список модов, которые можно отключить. Если вы видите php5это
pferrel
2

Для меня следующие полностью работают на Debian:

  1. Отключить prefork, включить событие: a2dismod mpm_prefork && a2enmod mpm_event
  2. удалить мод-php5: aptitude remove libapache2-mod-php5
  3. Имейте в виду, что у вас есть каждая php_опция в вашем VHost <IfModule mod_php5.c></IfModule>, иначе apache не будет перезапущен
  4. делать service apache2 restart
Süther
источник
1

Ищите следующее в разделах «Загрузка модулей» вашего конфигурационного файла apache:

LoadModule mpm_event_module modules/mod_mpm_event.so

И замените его следующим модулем:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Ajsti.pl - Мачей Шевчик
источник
НЕТ, не делай этого! Apache является модульной сборкой, так что вам не нужно изменять какие-либо LoadModule-Lines в своих конфигах. Только делай a2dismod mpm_prefork && a2enmod mpm_event. Затем перезапустите ваш Apache, и все готово.
17
0

модуль php5 нуждается в prefork mpm, а чтобы отключить prefork, нужно отключить php5.

под debian я сделал от имени root следующее:

отключить prefork mpm

a2dismod mpm_prefork

включите событие mpm, или любой другой mpm, который вы предпочитаете. заметьте, я обнаружил, что mpm не рекомендуется для apache 2.2 или более ранней версии.

a2enmod mpm_event

отключить загрузку модуля php5, но без деинсталляции.

a2dismod php5

проверить общую правильность полученного конфига apache. Ошибки должны быть справились с в соответствии с ответом на @sulther выше.

apache2ctl -t

перезапустить Apache

systemctl restart apache2

в случае, если php все еще необходим, должна быть установлена ​​поточно-безопасная версия. см .: https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0

удачи

Алекс Боднару
источник