¿Cómo habilitar el evento MPM Apache 2.4 en Ubuntu 14.04 con PHP seguro para subprocesos?

25

Actualicé a Ubuntu Server 14.04 esperando que la instalación predeterminada de Apache usara el nuevo evento MPM, pero en su lugar encuentro el antiguo prefork que consume memoria.

He configurado con éxito el evento MPM en Arch Linux, pero no puedo hacerlo en Ubuntu. Sigo recibiendo:

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

Ya instalé php-fpmy configuré apache2 para usarlo, pero como los archivos de configuración para apache2 son diferentes en Ubuntu, no estoy muy seguro de si lo estoy haciendo en el lugar correcto.

¿Alguna idea sobre cómo hacer que el hilo PHP sea seguro para que pueda usar apache2 event-mpm? (sin tener que volver a compilar manualmente php, por supuesto)

Towerman
fuente

Respuestas:

39

Para deshabilitar event MPM, puede hacerlo sudo a2dismod mpm_eventy luego habilitarlo prefork, debe hacerlo sudo a2enmod mpm_prefork.

Finalmente reinicie apache:

sudo service apache2 restart
Mehraban
fuente
3
Necesitas estar allí ... No aquí ... allí ... en la parte superior de la lista de Respuestas.
Karma
2
¡Esta debería ser la respuesta aceptada! No olvide reiniciar Apache después de hacer esto:sudo service apache2 restart
Reeno
44
¿Cómo responde esto a la pregunta de cómo habilitar MPM, como preguntó el OP? Estás explicando cómo hacer lo contrario de lo que pidió el OP.
Craig
2
@Mehraban, OP preguntó palabra por palabra "¿Cómo habilitar el evento MPM?", Y su respuesta es "Simplemente desactive el evento MPM". ¿Cómo es esta una respuesta aceptable?
Nicolas Bouliane
1
@Mehraban Sin embargo, esa no es la pregunta que se hizo, por lo que todo el tráfico que viene de Google se dice "la mejor manera de hacer X es no hacer X". Si pregunto cómo hacer galletas de chocolate, espero una receta de galletas de chocolate.
Nicolas Bouliane
13

Esto funcionó para mí.

Primero verifique si tiene este paquete instalado:

dpkg -l | grep libapache2-mod-php5

Si lo tiene, simplemente retírelo:

apt-get remove libapache2-mod-php5
Carlos Mafla
fuente
¡Esta es la respuesta correcta!
DrSvanHay
6

Puede instalar múltiples formas para que Apache se comunique con PHP en paralelo. Tal vez tenga (todavía) el antiguo mod_php instalado, además de fastcgi / php-fpm.

Puede ver qué módulos ha cargado su Apache en tiempo de ejecución con

apache2ctl -M

Si es necesario, utilícelo sudopara obtener privilegios de root. Si ve php5_module (shared)entre los módulos que usa actualmente su Apache, el antiguo mod_php todavía está instalado y le impide usar mpm_workero mpm_event.

Henning Kockerbeck
fuente
55
No puede ejecutar eso para obtener modificaciones si el servidor no se está iniciando, intente y sudo a2dismodluego presione el carácter de tabulación dos veces para ver una lista de modificaciones que pueden desactivarse. Si lo ves php5diable.
Pferrel
2

Para mí, seguir trabajando completamente en Debian:

  1. Deshabilitar prefork, habilitar evento: a2dismod mpm_prefork && a2enmod mpm_event
  2. eliminar mod-php5: aptitude remove libapache2-mod-php5
  3. Tenga en cuenta que tiene cada php_Opción en su encapsulado VHost <IfModule mod_php5.c></IfModule>, de lo contrario apache no se reiniciará
  4. hacer service apache2 restart
suther
fuente
1

Busque lo siguiente en las secciones Cargar módulos de su archivo de configuración de apache:

LoadModule mpm_event_module modules/mod_mpm_event.so

Y reemplácelo con el siguiente módulo:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Ajsti.pl - Maciej Szewczyk
fuente
NO, no hagas esto! Apache es una compilación modular, por lo que no tiene que cambiar ninguna LoadModule-Lines en sus configuraciones. Solo hazlo a2dismod mpm_prefork && a2enmod mpm_event. Luego reinicie su apache, y listo.
suther
0

el módulo php5 necesita prefork mpm, y para deshabilitar prefork, uno tiene que deshabilitar php5.

bajo debian, hice lo siguiente, como root:

deshabilitar el prefork mpm

a2dismod mpm_prefork

habilite el evento mpm, o cualquier mpm que prefiera. tenga en cuenta que el evento mpm no se recomienda para apache 2.2 o anterior

a2enmod mpm_event

para deshabilitar la carga del módulo php5, pero sin desinstalación.

a2dismod php5

para probar la corrección general de la configuración de apache resultante. los errores tendrían que ser resueltos según la respuesta de @sulther anterior.

apache2ctl -t

reiniciar apache

systemctl restart apache2

en caso de que aún se necesite php, se debe instalar una versión segura para subprocesos. ver: https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-freebsd-12-0

buena suerte

Alex Bodnaru
fuente