Bagaimana cara mengaktifkan acara MPM Apache 2.4 di Ubuntu 14.04 dengan PHP aman?

25

Saya memutakhirkan ke Ubuntu Server 14.04 mengharapkan instalasi apache default akan menggunakan MPM acara baru, tetapi sebaliknya saya menemukan prefork pemakan memori lama.

Saya telah berhasil mengatur acara MPM di Arch Linux, tetapi saya gagal melakukannya di Ubuntu. Saya terus mendapatkan:

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

Saya sudah menginstal php-fpm, dan mengkonfigurasi apache2 untuk menggunakannya, tetapi karena file konfigurasi untuk apache2 berbeda di Ubuntu, saya tidak yakin apakah saya melakukannya di tempat yang tepat.

Adakah ide tentang cara membuat thread PHP aman sehingga saya dapat menggunakan apache2 event-mpm? (tanpa harus secara manual mengkompilasi ulang php, tentu saja)

Towerman
sumber

Jawaban:

39

Untuk menonaktifkan event MPM, Anda dapat melakukan sudo a2dismod mpm_eventdan setelah itu untuk mengaktifkan prefork, Anda harus melakukannya sudo a2enmod mpm_prefork.

Akhirnya restart apache:

sudo service apache2 restart
Mehraban
sumber
3
Anda harus ada di sana ... Tidak di sini .. di sana ... di bagian atas daftar Jawaban.
Karma
2
Ini harus menjadi jawaban yang diterima! Jangan lupa untuk me-restart apache setelah melakukan ini:sudo service apache2 restart
Reeno
4
Bagaimana ini menjawab pertanyaan tentang bagaimana mengaktifkan MPM, seperti yang ditanyakan OP? Anda menjelaskan bagaimana melakukan kebalikan dari apa yang diminta OP.
Craig
2
@Mehraban, OP bertanya kata demi kata "Cara mengaktifkan acara MPM?", Dan jawaban Anda adalah "Nonaktifkan acara MPM". Bagaimana ini jawaban yang bisa diterima?
Nicolas Bouliane
1
@Mehraban Bukan itu pertanyaan yang ditanyakan, jadi semua lalu lintas yang datang ke sini dari Google diberi tahu "cara terbaik untuk melakukan X adalah tidak melakukan ke X". Jika saya bertanya bagaimana membuat kue cokelat, saya berharap resep kue coklat.
Nicolas Bouliane
13

Ini berhasil untuk saya.

Pertama periksa apakah Anda memiliki paket ini diinstal:

dpkg -l | grep libapache2-mod-php5

Jika Anda memilikinya, hapus saja:

apt-get remove libapache2-mod-php5
Carlos Mafla
sumber
Ini jawaban yang benar!
DrSvanHay
6

Anda dapat menginstal berbagai cara agar Apache berkomunikasi dengan PHP secara paralel. Mungkin Anda telah (masih) menginstal mod_php lama, juga fastcgi / php-fpm.

Anda dapat melihat modul mana yang telah dimuat oleh Apache Anda saat runtime

apache2ctl -M

Jika perlu, gunakan sudountuk mendapatkan hak akses root. Jika Anda melihat di php5_module (shared)antara modul-modul yang saat ini digunakan Apache Anda, mod_php lama masih terpasang dan memblokir Anda untuk menggunakan mpm_workeratau mpm_event.

Henning Kockerbeck
sumber
5
Tidak dapat menjalankan itu untuk mendapatkan mod jika server tidak memulai, coba sudo a2dismodlalu tekan karakter tab dua kali untuk melihat daftar jika mod yang dapat dinonaktifkan. Jika Anda melihat php5itu diable.
pferrel
2

Bagi saya mengikuti sepenuhnya bekerja pada debian:

  1. Nonaktifkan prefork, aktifkan acara: a2dismod mpm_prefork && a2enmod mpm_event
  2. hapus mod-php5: aptitude remove libapache2-mod-php5
  3. Ketahuilah bahwa Anda memiliki setiap php_Opsi dalam VHost Anda enkapsulasi <IfModule mod_php5.c></IfModule>, jika tidak apache tidak akan dimulai ulang
  4. melakukan service apache2 restart
suther
sumber
1

Cari yang berikut ini di bagian Load Module dari file konfigurasi apache Anda:

LoadModule mpm_event_module modules/mod_mpm_event.so

Dan ganti dengan modul berikut:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Ajsti.pl - Maciej Szewczyk
sumber
TIDAK, jangan lakukan ini! Apache dibuat modular, jadi Anda tidak perlu mengubah LoadModule-Lines apa pun menjadi konfigurasi Anda. Lakukan saja a2dismod mpm_prefork && a2enmod mpm_event. Kemudian restart apache Anda, dan Anda selesai.
suther
0

modul php5 membutuhkan prefork mpm, dan untuk menonaktifkan prefork, kita harus menonaktifkan php5.

di bawah debian, saya melakukan hal berikut, sebagai root:

nonaktifkan prefork mpm

a2dismod mpm_prefork

aktifkan mpm acara, atau mpm apa pun yang Anda inginkan. perhatikan saya menemukan acara mpm tidak direkomendasikan untuk apache 2.2 atau sebelumnya

a2enmod mpm_event

untuk menonaktifkan memuat modul php5, tetapi tanpa uninstall.

a2dismod php5

untuk menguji kebenaran keseluruhan dari konfigurasi apache yang dihasilkan. kesalahan perlu diatasi sesuai dengan jawaban dari @sulther di atas.

apache2ctl -t

restart apache

systemctl restart apache2

jika php masih diperlukan, versi threadsafe harus diinstal. lihat: https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0-0

semoga berhasil

Alex Bodnaru
sumber