Solucionar problemas al actualizar a Apache 2.4 en ArchLinux

Friday 7 de March de 2014, 11:49 am 24 Comments

¡Ha llegado Apache 2.4 a ArchLinux! Es un cambio importante y requiere nuestra intervención manual para hacer que nuestro servidor LAMP vuelva a funcionar sin problemas.

Con la actualización, tenemos nuevos archivos httpd.conf, php.ini y magic, por lo que primero debemos hacer un respaldo de nuestros viejos archivos:

sudo mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old
sudo mv /etc/httpd/conf/magic /etc/httpd/conf/magic.old
sudo mv /etc/php/php.ini /etc/php/php.ini.old

Entonces, renombramos los nuevos archivos:

sudo mv /etc/httpd/conf/httpd.conf.pacnew /etc/httpd/conf/httpd.conf
sudo mv /etc/httpd/conf/magic.pacnew /etc/httpd/conf/magic
sudo mv /etc/php/php.ini.pacnew /etc/php/php.ini

Apache viene con una serie de Módulos de MultiProcesamiento (Multi-Processing Modules o MPMs) que son responsables de conectar con los puertos de red de la máquina, acceptar las peticiones, y generar los procesos hijo que se encargan de servirlas. En el “nuevo” Apache 2.4 se usa el event MPM (previamente se usaba el prefork, que era más lento y consumía más memoria), que proporciona escalabilidad y buen soporte para alto tráfico de sitios web.

Por lo anterior, hay dos posibles soluciones: Volver a habilitar el prefork, o hacer los cambios necesarios para que el event MPM funcione adecuadamente.

Solución 1: Regresar a mod_mpm_prefork

Si no quieres romperte la cabeza con la migración a las novedades de Apache 2.4, lo que necesitas es volver a habilitar mod_mpm_prefork. Para ello, vamos a abrir el archivo /etc/httpd/conf/httpd.conf

sudo vim /etc/httpd/conf/httpd.conf

… y ahí, reemplazaremos la línea

LoadModule mpm_event_module modules/mod_mpm_event.so

con

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Además, debemos incluir dos líneas adicionales, muy conocidas por nosotros. La primera debemos colocarla en la lista de carga de módulos (LoadModule list) después de LoadModule dir_module modules/mod_dir.so:

LoadModule php5_module modules/libphp5.so

La segunda, al final de la lista de configuraciones adicionales (Include list):

Include conf/extra/php5_module.conf

Y reiniciamos Apache para reflejar los cambios:

sudo systemctl restart httpd.service

Solución 2: Usar el nuevo mod_mpm_event

Si queremos aprovechar todas las bondades y novedades de Apache 2.4, ésta es la solución que debemos seguir.

Como primer paso, vamos a instalar php-fpm desde los repos oficiales:

sudo pacman -S php-fpm

Adicionalmente, instalaremos mod_proxy_handler desde AUR (esperemos que pronto lo agreguen a los repos oficiales):

yaourt -S mod_proxy_handler

En el archivo /etc/php/php-fpm.conf, descomentar la línea (quitar ; del principio):

listen = 127.0.0.1:9000

y comentar la línea (agregar ; al principio):

listen = /run/php-fpm/php-fpm.sock

En el mismo archivo, también debemos descomentar la línea:

listen.allowed_clients = 127.0.0.1

En el archivo /etc/httpd/conf/httpd.conf, agregar al final:

LoadModule proxy_handler_module modules/mod_proxy_handler.so
<FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000/"
</FilesMatch>
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

Finalmente, en el archivo /etc/php/php.ini debemos asegurarnos de que la siguiente línea está habilitada (descomentada):

cgi.fix_pathinfo=1

Reiniciar los daemons involucrados:

sudo systemctl restart php-fpm.service
sudo systemctl restart httpd.service

¿Y MySQL / MariaDB? Al usar el nuevo archivo php.ini, debemos volver a decirle a PHP de la existencia del servidor de base de datos. Vamos a abrir el archivo /etc/php/php.ini con tu editor favorito …

sudo vim /etc/php/php.ini

… y descomentar (eliminar el ; al inicio) las siguientes líneas:

extension=mysqli.so
extension=mysql.so
extension=pdo_mysql.so

Finalmente, reiniciemos Apache y MariaDB para aplicar los cambios realizados.

sudo systemctl restart httpd.service
sudo systemctl restart mysqld.service

Fuentes: 1, 2, 3.

Share

Post tags