Wie aktiviere ich Event MPM Apache 2.4 unter Ubuntu 14.04 mit threadsicherem PHP?

25

Ich habe ein Upgrade auf Ubuntu Server 14.04 durchgeführt, in der Erwartung, dass die Standard-Apache-Installation das neue Ereignis-MPM verwenden würde, aber stattdessen finde ich den alten speicherfressenden Prefork.

Ich habe Event MPM erfolgreich in Arch Linux eingerichtet, aber ich kann dies unter Ubuntu nicht tun. Ich bekomme immer:

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

Ich habe Apache2 bereits installiert php-fpmund konfiguriert, um es zu verwenden, aber da die Konfigurationsdateien für Apache2 unter Ubuntu unterschiedlich sind, bin ich mir nicht ganz sicher, ob ich es am richtigen Ort mache.

Irgendeine Idee, wie man PHP-Thread sicher macht, damit ich apache2 event-mpm verwenden kann? (natürlich ohne PHP manuell neu kompilieren zu müssen)

Towerman
quelle

Antworten:

39

Zum Deaktivieren event MPMkönnen Sie dies tun sudo a2dismod mpm_eventund danach preforksollten Sie dies tun sudo a2enmod mpm_prefork.

Schließlich starten Sie Apache neu:

sudo service apache2 restart
Mehraban
quelle
3
Sie müssen dort sein ... Nicht hier ... dort ... ganz oben auf der Liste der Antworten.
Karma
2
Dies sollte die akzeptierte Antwort sein! Vergiss nicht, Apache danach neu zu starten:sudo service apache2 restart
Reeno
4
Wie beantwortet dies die Frage, wie MPM aktiviert werden soll, wie vom OP gestellt? Sie erklären, wie Sie das Gegenteil von dem tun, wonach das OP gefragt hat.
Craig
2
@Mehraban, OP fragte Wort für Wort nach "Wie aktiviere ich Event-MPM?", Und Ihre Antwort lautet "Deaktiviere einfach Event-MPM". Wie ist das eine akzeptable Antwort?
Nicolas Bouliane
1
@Mehraban Dies ist jedoch nicht die Frage, die gestellt wurde. Daher wird dem gesamten Datenverkehr, der von Google hierher kommt, mitgeteilt, dass "der beste Weg, X zu tun, nicht X zu tun ist". Wenn ich frage, wie man Schokoladenkekse macht, erwarte ich ein Schokoladenkeksrezept.
Nicolas Bouliane
13

Das hat bei mir funktioniert.

Überprüfen Sie zuerst, ob Sie dieses Paket installiert haben:

dpkg -l | grep libapache2-mod-php5

Wenn Sie es haben, entfernen Sie es einfach:

apt-get remove libapache2-mod-php5
Carlos Mafla
quelle
Das ist die richtige Antwort!
DrSvanHay
6

Sie können mehrere Möglichkeiten für Apache installieren, um parallel mit PHP zu kommunizieren. Vielleicht hast du (noch) das alte mod_php installiert, zusätzlich zu fastcgi / php-fpm.

Sie können sehen, mit welchen Modulen Ihr Apache zur Laufzeit geladen hat

apache2ctl -M

Verwenden Sie bei Bedarf, sudoum Root-Berechtigungen abzurufen. Wenn Sie php5_module (shared)unter den Modulen sehen, die Ihr Apache gerade verwendet, ist das alte mod_php immer noch installiert und blockiert die Verwendung von mpm_workeroder mpm_event.

Henning Kockerbeck
quelle
5
Das kann nicht ausgeführt werden, um Mods zu erhalten, wenn der Server nicht startet. Versuchen Sie, sudo a2dismoddas Tabulatorzeichen zweimal zu drücken, um eine Liste der Mods anzuzeigen, die deaktiviert werden können. Wenn du es php5verderblich siehst .
Pferrel
2

Für mich ist folgende Arbeit vollständig auf Debian:

  1. Prefork deaktivieren, Event aktivieren: a2dismod mpm_prefork && a2enmod mpm_event
  2. entferne mod-php5: aptitude remove libapache2-mod-php5
  3. Beachten Sie, dass Sie jede php_Option in Ihrem VHost durch kapseln <IfModule mod_php5.c></IfModule>, sonst wird Apache nicht neu gestartet
  4. machen service apache2 restart
Suther
quelle
1

Suchen Sie in den Abschnitten zum Laden von Modulen in Ihrer Apache-Konfigurationsdatei nach den folgenden Informationen:

LoadModule mpm_event_module modules/mod_mpm_event.so

Und ersetzen Sie es durch das folgende Modul:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Ajsti.pl - Maciej Szewczyk
quelle
NEIN, tu das nicht! Apache ist modular aufgebaut, so dass Sie keine LoadModule-Lines in Ihre Configs ändern müssen. Nur zu tun a2dismod mpm_prefork && a2enmod mpm_event. Starten Sie dann Ihren Apache neu und Sie sind fertig.
Suther
0

das php5-modul benötigt die prefork mpm, und um prefork zu deaktivieren, muss man php5 deaktivieren.

unter debian habe ich als root folgendes gemacht:

Deaktivieren Sie die Prefork-MPM

a2dismod mpm_prefork

Aktivieren Sie das Ereignis mpm, oder was auch immer Sie bevorzugen. ich habe festgestellt, dass event mpm für apache 2.2 oder früher nicht empfohlen wurde

a2enmod mpm_event

zum deaktivieren des php5 moduls laden, aber ohne deinstallation.

a2dismod php5

um die allgemeine Korrektheit der resultierenden Apache-Konfiguration zu testen. Fehler müssten gemäß der Antwort von @sulther oben bewältigt werden .

apache2ctl -t

starte Apache neu

systemctl restart apache2

falls php noch benötigt wird, sollte eine threadsafe version installiert werden. Siehe: https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0

Viel Glück

Alex Bodnaru
quelle