Jak włączyć zdarzenie MPM Apache 2.4 na Ubuntu 14.04 z bezpiecznym wątkiem PHP?


25

Uaktualniłem do Ubuntu Server 14.04, spodziewając się, że domyślna instalacja apache wykorzysta nowe zdarzenie MPM, ale zamiast tego znajduję starą wersję zajadającą pamięć.

Z powodzeniem skonfigurowałem zdarzenie MPM w Arch Linux, ale nie robię tego na Ubuntu. Ciągle otrzymuję:

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

Już zainstalowałem php-fpmi skonfigurowałem apache2, aby go używał, ale ponieważ pliki konfiguracyjne dla apache2 są inne w systemie Ubuntu, nie jestem pewien, czy robię to we właściwym miejscu.

Masz pomysł, jak zabezpieczyć wątek PHP, aby móc używać zdarzenia apache2 event-mpm? (oczywiście bez konieczności ręcznej ponownej kompilacji php)

Odpowiedzi:


39

Aby wyłączyć event MPM, możesz to zrobić, sudo a2dismod mpm_eventa następnie, aby włączyć prefork, powinieneś to zrobić sudo a2enmod mpm_prefork.

Na koniec uruchom ponownie apache:

sudo service apache2 restart

3
Musisz tam być ... Nie tutaj ... tam ... na górze listy odpowiedzi.
— Karma,

2
To powinna być zaakceptowana odpowiedź! Nie zapomnij zrestartować apache po wykonaniu tej czynności:sudo service apache2 restart
— Reeno

4
Jak to odpowiada na pytanie, jak włączyć MPM, tak jak zadał PO? Wyjaśniasz, jak zrobić odwrotność tego, o co poprosił PO.
— Craig,

2
@ Mehraban, OP poprosił o słowo „Jak włączyć zdarzenie MPM?”, A twoja odpowiedź brzmi „Po prostu wyłącz zdarzenie MPM”. Jak to jest akceptowalna odpowiedź?
— Nicolas Bouliane

1
@ Mehraban To nie jest pytanie, które zostało zadane, więc cały ruch przychodzący z Google otrzymuje informację, że „najlepszym sposobem na X nie jest X”. Jeśli zapytam, jak zrobić czekoladowe ciasteczka, oczekuję przepisu na czekoladowe ciasteczka.
— Nicolas Bouliane,

13

To zadziałało dla mnie.

Najpierw sprawdź, czy masz zainstalowany ten pakiet:

dpkg -l | grep libapache2-mod-php5

Jeśli go masz, po prostu go usuń:

apt-get remove libapache2-mod-php5

To poprawna odpowiedź!
— DrSvanHay

6

Możesz zainstalować wiele sposobów równoległej komunikacji Apache z PHP. Może masz (nadal) zainstalowany stary mod_php, dodatkowo do fastcgi / php-fpm.

Możesz sprawdzić, które moduły załadował twój Apache w czasie wykonywania

apache2ctl -M

W razie potrzeby użyj, sudoaby uzyskać uprawnienia roota. Jeśli widzisz php5_module (shared)wśród modułów, których obecnie używa Apache, stary mod_php jest nadal zainstalowany i blokuje korzystanie z mpm_workerlub mpm_event.


5
Nie można uruchomić tego, aby uzyskać mody, jeśli serwer się nie uruchamia, spróbuj sudo a2dismodnastępnie dwukrotnie nacisnąć znak tabulacji, aby zobaczyć listę modów, które można wyłączyć. Jeśli widzisz php5to możliwe.
— pferrel

2

Dla mnie następujące pełne prace nad Debianem:

  1. Wyłącz prefork, włącz zdarzenie: a2dismod mpm_prefork && a2enmod mpm_event
  2. usuń mod-php5: aptitude remove libapache2-mod-php5
  3. Pamiętaj, że masz każdą php_opcję w VHost enkapsulowaną przez <IfModule mod_php5.c></IfModule>, w przeciwnym razie apache nie uruchomi się ponownie
  4. robić service apache2 restart

1

Poszukaj następujących informacji w sekcjach Ładowanie modułów pliku konfiguracyjnego apache:

LoadModule mpm_event_module modules/mod_mpm_event.so

I zamień go na następujący moduł:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

NIE, nie rób tego! Apache ma budowę modułową, więc nie musisz zmieniać żadnych LoadModule-Lines w swoje konfiguracje. Zrób tylko a2dismod mpm_prefork && a2enmod mpm_event. Następnie uruchom ponownie apache i gotowe.
— suther 10.10.17

0

moduł php5 potrzebuje prefork mpm, a aby wyłączyć prefork, należy wyłączyć php5.

w ramach Debiana zrobiłem następujące, jako root:

wyłącz prefork mpm

a2dismod mpm_prefork

włącz wydarzenie mpm lub dowolne preferowane mpm. Uwaga: znalazłem zdarzenie mpm nie było zalecane dla Apache 2.2 lub wcześniejszego

a2enmod mpm_event

aby wyłączyć ładowanie modułu php5, ale bez dezinstalacji.

a2dismod php5

aby przetestować ogólną poprawność wynikowej konfiguracji apache. Błędy należałoby poradził sobie ze jak na odpowiedź z @sulther powyżej.

apache2ctl -t

uruchom ponownie apache

systemctl restart apache2

w przypadku, gdy php jest nadal potrzebny, należy zainstalować wersję wątkowo bezpieczną. patrz: https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0

powodzenia

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.