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.