Optimizar Apache y Servidor para WordPress (y cualquier script)

optimizar apache

Hay múltiples consejos para optimizar nuestro script, para mejorar su velocidad, estabilidad… pero también a nivel de servidor, podemos mejorar cuestiones importantes.

El servidor es la parte más importante, puesto que es la que aloja nuestro sitio. Sin el servidor, nuestro sitio no está en internet. Y sí, un servidor, además de mantenimiento, también requiere ser optimizado.

Por lo general, los servidores web son apache, y vienen con una configuración que tiene ya muchos lustros. Y que por lo tanto, no solo están pensados para pequeños servidores, sino que además, no están directamente pensadas para el uso en scripts como WordPress, por ejemplo. Por lo tanto, hay que optimizarlos.

Lo primero que hay que apuntar, es que cada servidor, es un mundo. Y que por lo tanto, lo que puede valer para un servidor, puede no ser válido para otro. En este post vamos a explicar unas directrices generales, por lo anteriormente comentado, cada servidor es un mundo, y requiere ser analizado de forma específica.

Si prefieres dejar la optimización de tu servidor en manos de profesionales, puedes contar con nuestros servidores dedicados administrados, o bien, con nuestros planes de administración de servidores.

Optimizar Apache y Servidor para WordPress

Servidores Web, Apache

Apache es un servidor web HTTP de código abierto. Es el más utilizado a nivel mundial. Apache nació en 1995, gracias al proyecto del grupo Apache basado en el servidor Apache HTTPD de la NCS. Gracias a un listado de correo, Brian Behlendorf y Cliff Skolnick, crearon un espacio compartido para desarrolladores. En 1999 se fundó la Fundación de Software Apache, para desarrollar el servidor.

Entre las ventajas que cuenta Apache, además de ser de código abierto, es que es gratuito, y su compatibilidad con Windows, Linux o MacOS.

Dada su popularidad, Apache tiene la ventaja de que está en constante desarrollo. Su rendimiento es una de las principales razones por las que optar por el. Tiene la capacidad de absorber un número muy elevado de visitas, y es posible aumentar este rendimiento ajustando variables que Apache nos permite configurar.

Donde Optimizar el rendimiento de Apache

La palabra optimizar no llega hasta nuestros oídos, hasta que nuestro sitio no empieza a sufrir problemas. De entrada es un error. Pero tiene solución.

Para optimizar Apache necesitamos acceso SSH en la gran mayoría de casos. Para acceder al archivo de apache, generalmente, se encuentra instalado en estas rutas, dependiendo del servidor, la distribución… :

1
/etc/apache2/apache2.conf
1
/etc/httpd/conf/httpd.conf

Lo primero que tendríamos que hacer, es un backup de dicho archivo. A continuación, mediante una herramienta de edición de textos, como nano, vi… pasaremos a optimizar las variables de Apache.

Los módulos, Prefork o Worker

Para empezar, Apache nos va a cargar los módulos Prefork y Worker. No es que sea malo, pero si optimizable. La idea es elegir uno. ¿Como? Expliquemos para que sirve cada modulo.

MPM Prefork

Prefork utiliza múltiples procesos secundarios con un hilo para cada uno de ellos. Y cada proceso, nos gestionara una conexión cada vez. Prefork por lo tanto, utiliza mayor cantidad de memoria, que worker. Aunque puede llegar a ser ligeramente más veloz. Pero su principal ventaja, es su diseño sin hilos. Así pues, los módulos de terceros pueden usarse sin protección de hilos, siendo mucho más fácil de depurar. Permite tener múltiples procesos secundarios, donde cada proceso nos genera un hilo, siendo los procesos secundarios quienes gestionan las peticiones. Además, tiene mejor aislamiento y estabilidad. Es recomendable para utilizar en scripts. Su desventaja, es un consumo de memoria más elevado.

Estas son las directivas por defecto de Prefork:

1
2
3
4
5
6
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000

 

MPM Worker

Worker, por su parte, utiliza multiples procesos secundarios, cada uno de ellos con multiples hilos. Cada hilo gestiona una conexion a la vez. Por lo tanto, Worker, como su nombre indica, esta preparado para trabajar duro. Es una gran opcion para servidores con trafico elevado, consumiendo menor memoria que Prefork. En general, Worker mejora el rendimiento de Prefork. No obstante, no es tan estable como Prefork, y si uno de los hilos se suspende, todo el proceso terminará, afectando a todos los hilos.

Worker tiene las siguientes directivas por defecto:

1
2
3
4
5
6
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0

Para saber que modulo esta utilizando nuestro servidor, podemos ejecutar el siguiente comando:

1
apachectl -t -D DUMP_MODULES |grep mpm

 

Modulos

A la hora de optimizar, una buena idea, es comprobar que módulos estamos cargando, y comprobar si realmente nos hacen falta. Como los casos de los módulos Prefork y Worker, no es necesario tener ambos activos, porque Apache solo utilizara uno. Por lo tanto, ¿Para que cargarlo? Pues bien, el resto de modulos, tambien seria interesante revisarlos, y comprobar si son necesarios. Como ejemplo, el mod_expires, es uno de los que se suele cargar, y generalmente, es uno de los más utilizados. Expires nos permite definir variables de caché, o el mod_deflate, otro de los muy utilizados, para la compresión de imágenes, por ejemplo. Pero muchos otros módulos puede que no se utilicen, y estén usando memoria valiosa para nuestro servidor. Revisa que módulos estas cargando, comprueba para qué sirven en la documentación de apache (http://httpd.apache.org/docs/current/mod/), y decide en base al uso que se haga del servidor.

 

Optimizar Apache WordPress

Ya hemos dicho que lo primero a elegir, es si optimizar sobre Prefork o Worker. Cada caso, cada servidor, es un mundo. Si tienes muchas visitas, y muchas de ellas concurrentes, ademas de poca memoria RAM, tu decisión debe ser clara, Worker. Si la memoria no es un problema, y tus visitas son escalonadas, busca la estabilidad con Prefork.

En nuestro caso vamos a optimizar sobre Prefork.

KeepAlive

Establece si el servidor permite más de una solicitud por conexión. Se puede utilizar, por ejemplo, para que un cliente no consuma demasiados recursos. Si vemos, que nuestro servidor tiene problemas porque recibe solicitudes de cientos y miles de IPs a la vez, debemos activar KeepAlive. Por defecto, en CentOS, viene inactiva. Editaremos el archivo de configuración, y modificaremos:

1
KeepAlive On

 

MaxKeepAliveRequests

Es la cantidad máxima de solicitudes que atenderá el servidor en una conexión TCP. Podemos limitar la cantidad de solicitudes permitidas por conexión. Si está configurado en 0, se permiten solicitudes ilimitadas.

Lo ideal para este valor, es que sea alto, para obtener más rendimiento del servidor. Un valor apropiado, podrían ser 500.

1
MaxKeepAliveRequests 500

 

KeepAliveTimeout

Define el número de segundos que apache esperará la nueva solicitud de los clientes conectados, antes de cerrar la conexión. Lo ideal, es que teniendo KeepAlive activo, este valor sea bajo. Un valor entre 1 y 5 sería lo ideal.

1
KeepAliveTimeout 5

 

Variables Prefork

En cuanto a Prefork, como ya hemos visto, dispone de 5 variables a definir.

  • StartServers – Establece el número de procesos hijos del servidor creados al inicio. Es buena idea un aumento de este número en un servidor de alta carga, para que el servidor esté preparado para utilizar muchas conexiones. Un valor recomendable sería entre 5 y 15.
  • MinSpareServers – Establece la cantidad mínima de procesos hijo inactivos en el servidor. Para servidores de alta carga, este valor debe ser ajustado. Un ejemplo de valor recomendable, seria 5.
  • MaxSpareServers – Establece la cantidad máxima de procesos hijos inactivos en el servidor. Esta variable es recomendable que duplique la de MinSpareServers.
  • MaxClients – Establece cuántas solicitudes simultáneas podrá utilizar Apache. Al llegar a este límite cualquier otro intento se pondrá en cola, y no se procesara hasta que finalice alguna. No hay que confundir solicitudes simultáneas con visitas. Para ajustar esta variable, puedes utilizar la fórmula de MaxClients = Memoria RAM Total – Memoria RAM utilizada para otro proceso, exceptuando los procesos de apache / Memoria utilizada por un único proceso de Apache.
  • MaxRequestsPerChild – Esta directiva establece cuántas solicitudes manejara un proceso hijo antes de terminar. Una vez se alcanza el límite, el proceso secundario, muere. Si el valor es 0, no morirá nunca. Por lo tanto, lo ideal es que este valor esté en una variable entre 5000 y 1000.

Está, por lo tanto, sería nuestra configuración de prefork, para un servidor con WordPress, visitas escalonadas, y que la memoria RAM no supone un problema.

1
2
3
4
5
6
StartServers       5
MinSpareServers    5
MaxSpareServers   10
ServerLimit      150
MaxClients       150
MaxRequestsPerChild  10000

 

¿DNS Lookup?

Por último, vamos a hablar sobre algo, que es la razón principal de que apache pueda ser lento. Es el tiempo requerido para realizar la búsqueda DNS. En el access.log de Apache, este registrará el nombre del host completo de cada conexión entrante. Esto consume una cantidad de tiempo significativa, y mucho más, si acceden muchos usuarios a la vez.

Verifica que HostnameLookups está en Off, ya que podría ser la causante de un problema en tu servidor.

Conclusión

Optimizar Apache no tiene porque ser traumático. Y no es un problema. Es una solución a muchos problemas. Puede ser tan importante como la optimización sobre el propio script. Una mala optimización, nos puede llevar a perder visitas, y mucho dinero. Si no esta seguro de cómo proceder, siéntete libre de dejarnos un comentario, o bien, puedes optar por nuestros servicios, tanto a nivel de servidores dedicados, ya administrados, como con nuestros planes de administración.

[Total:1    Promedio:5/5]

Send this to a friend