El día de hoy les hablaré de como Optimizar Apache para WordPress o en otras palabras, que configuraciones deberías tomar en cuenta para mejorar el rendimiento de tu blog o página web basada en wordpress y sobre un servidor Apache.

Para realizar esta optimización nos enfocaremos en los siguientes pasos:

  • Configuraciones en Apache
  • Configuración de Módulo de MultiProcesamiento (MPM Event)
  • Configuración de PHP5 handler (php5-fpm)
  • Configuración de FastCGI

Antes de comenzar debo indicarles que este manual lo haré basándome en las siguientes premisas:

  • Versión de Sistema operativo:  Debian 8.3
  • Versión de Apache: 2.4.10
  • Versión de PHP: 5.6.26
  • Todos los comandos se estan ejecutando con el usuario root, en caso de no contar con ese usuario deben hacer sudo
  • Antes de modificar algún archivo debes hacer backup del mismo

Comencemos con las Configuraciones en Apache

Editar el archivo /etc/apache2/apache2.conf, modificando un subconjunto de parámetros de configuración que pertenecen al núcleo Apache con el fin de optimizar la concurrencia.:

Para una explicación más detallada de los parámetros anteriores, puedes consultar la documentación de Apache.

Configuración de Módulo de MultiProcesamiento (MPM Event)

Actualmente disponemos de tres módulos multiprocesamiento de Apache considerados como estables y uno en versión experimental, que son los siguientes:

  • Multiprocesamiento tipo Prefork (mpm-prefork).
  • Multiprocesamiento tipo Worker (mpm-worker).
  • Multiprocesamiento tipo Event (mpm-event).
  • Multiprocesamiento tipo ITK (mpm-itk todavía en fase experimental).

Cuando hablamos de módulos multiprocesamiento en Apache nos referimos a las siglas MPM. Estos módulos son los que se encargan de las funciones internas más elementales del servidor Apache, como pueden ser procesar las peticiones HTTP, administrar procesos o hilos de Apache y un largo etc. Lo que si debemos tener claro es quepodemos tener varios módulos MPM instalados pero solamente uno cargado y funcionando y en este artículo trataremos de ayudaros a elegir el módulo MPM de Apache que más os conviene.

Como nota, los nombres que usa la distribución Linux para los diferentes paquetes de los MPM son: apache2-mpm-prefork, apache2-mpm-worker, apache2-mpm-event y apache2-mpm-itk. Para más detalles puedes entrar en VozIdea.com

Para este tutorial trabajaremos con módulo de Multiprocesamiento tipo Event (mpm-event), por lo que lo primero que haremos es verificar que versión tenemos configurada con el siguiente comando:

apachectl -V | grep MPM

En caso de que tengamos configurado un módulo diferente a event, debemos proceder a desactivarlo con el siguiente comando:

a2dismod mpm_prefork
# o con el comando 
a2dismod mpm_worker

Para posteriormente instalar el módulo de tipo event y activarlo con los siguientes comandos:

apt-get install apache2-mpm-event
a2enmod mpm_event

Ahora bien, para configurar el módulo tipo event debemos editar el archivo /etc/apache2/mods-available/mpm_event.conf con los siguientes valores:

Para una explicación detallada de los parámetros anteriores puedes consultar la documentación de Apache. Ten en cuenta que el MPM de tipo Event comparte los mismos parámetros que el MPM de tipo Worker.

Configuración de PHP5 handler (php5-fpm)

Para ejecutar código PHP, Apache requiere un controlador de PHP. PHP5-FPM es el manejador de PHP para usar con el MPM de tipo Event, y se instala con el siguiente comando:

apt-get install php5-fpm

El siguiente paso es modificar el archivo /etc/php5/fpm/pool.d/www.conf, personalizando los siguientes valores:

Notas:

  • Los parámetros de “user” y “group” especifican respectivamente, el usuario Unix y grupo del mismo en las que los procesos de FPM se ejecutarán. Se debe especificar un usuario no root para ambos.
  • El parámetro “listen” especifica la dirección de origen que la FPM escuchará para la recepción de solicitudes de PHP. En este caso, se configurará el socket /var/run/php5-fpm.sock de Unix.
  • El resto de los parámetros se deben ajustar según la potencia de tu sistema.
  • Para más detalles acerca de los parámetros anteriores puedes consultar la documentación de PHP.

A continuación debemos reiniciar el manejador de PHP con el siguiente comando:

service php5-fpm restart

Si queremos validar que la configuración esta correcta podemos ejecutar el siguiente comando:

php5-fpm -t -y /etc/php5/fpm/pool.d/www.conf

Configuración de FastCGI

Apache requiere un módulo FastCGI para interactuar con los procesos PHP5-FPM externos. Se puede utilizar 1 de 2 módulos FastCGI: mod_fastcgi y mod_fcgid. Para una discusión de sus diferencias puedes consultar la siguiente documentación. En este tutorial usaremos mod_fastcgi.

  • Antes de instalar mod_fastcgi debes activar los repositorios “non-free” de Debian.
  • Posteriormente debemos desactivar el módulo mod_php, de lo contrario, la instalación fallará con el mensaje de error, ‘Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP‘.

Para desactivar mod_php, ejecute este comando:

a2dismod php5
  • Luego debemos instalar mod_fastcgi con el siguiente comando:
apt-get install libapache2-mod-fastcgi
  • A continuación debemos modificar el archivo /etc/apache2/mods-available/fastcgi.conf con los siguientes valores:
  • Activamos algunos módulos adicionales
a2enmod actions fastcgi alias
  • Y finalmente reiniciamos Apache para ver los resultados
apachectl restart

Cuando el tráfico de su sitio web aumenta con el tiempo, su servidor web debe escalar para manejar el aumento del tráfico. En este tutorial se explica cómo optimizar Apache para WordPress mejorando el número de conexiones simultáneas.

Para más información pueden consultar el artículo en inglés que sirvió de guía para este tutorial.


6 Comments

Vozidea · October 20, 2016 at 5:04 pm

Muy buen artículo y bien explicado, gracias.

    ArBo_HaCkEr · October 20, 2016 at 5:15 pm

    Muchisimas gracias por tu comentario, y gracias por el extracto que tome de tu blog 😉

Charles · February 22, 2017 at 7:18 pm

Cuando tengo que modificar el archivo /etc/apache2/mods-available/fastcgi.conf me da error y no me reinicia apache ¿Puedes ayudarme a solucionarlo?

    ArBo_HaCkEr · February 22, 2017 at 9:20 pm

    Que error te dio? Y colócame por favor lo que pusiste en el archivo y el error del apache al intentar levantar

      Charles · February 23, 2017 at 5:31 am

      Lo que puse es lo que pone en tu artículo:

      AddType application/x-httpd-fastphp5 .php
      Action application/x-httpd-fastphp5 /php5-fcgi
      Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
      FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization

      Require all granted

      Guardo el archivo y ejecuto apachectl configtest y me sale esto:

      [alias:warn] [pid 2850:tid 139779098830720] AH00671: The Alias directive in /etc/apache2/conf-enabled/php5-fpm.conf at line 4 will probably never match because it overlaps an earlier Alias.
      AH00526: Syntax error on line 5 of /etc/apache2/conf-enabled/php5-fpm.conf:
      FastCgiExternalServer: redefinition of previously defined class “/usr/lib/cgi-bin/php5-fcgi”
      Action ‘configtest’ failed.
      The Apache error log may have more information.

        ArBo_HaCkEr · March 7, 2017 at 10:01 am

        Pareciera que ya tienes creada una configuracion como la que sale en el articulo, deberias cambiar el nombre del alias o validar si ya esta configuracion la tenias hecha…

Leave a Reply to Charles Cancel reply

Avatar placeholder

Your email address will not be published. Required fields are marked *