Lanzado originalmente en 1995, el servidor web Apache es un veterano de Internet. Es cierto que hay servidores más nuevos, como algunos de código abierto que han llegado a lo largo de los últimos veinte años (seguro que conoces Nginx, por ejemplo), pero Apache aún opera en el «colmillo de león» de los servidores en todo el mundo. Según la mayoría de las estimaciones, su participación está entre el 40% y el 50% de todos los servidores orientados a la web.

Esta longevidad se debe a la escalabilidad de Apache y a la larga historia de su desarrollo. Apache es de código abierto, seguro, rico en características y sigue mejorando de manera continua: su última versión estable fue lanzada el pasado mes de julio de 2016.

Que Apache lleve tanto tiempo en el mercado tecnológico también significa que se puede encontrar mucha ayuda para su configuración. Existen todo tipo de consejos y trucos que sirven para aumentar significativamente el rendimiento, como los ajustes esenciales que vamos a ver a continuación, los cuales se pueden implementar en menos de una hora y que te serán muy útiles para mejorar el desempeño de tu servidor.

Optimizar los módulos

Apache utiliza módulos para extender sus características mucho más allá del paquete httpd del núcleo. La desventaja es que los módulos atan los recursos, y hay una gran probabilidad de que una configuración de Apache se esté ejecutando sin optimizar al menos en un par de módulos que no son necesarios.

Sólo se tarda unos pocos minutos en comprobar y desactivar cualquier módulo que no se esté utilizando. Para comprobar y ver qué módulos están activos, usa:

apachectl -M

Para las instalaciones de Debian / Ubuntu, utiliza estos comandos para permitir desactivar fácilmente los módulos:

Habilitar: module_name a2enmod
Desactivar: module_name a2dismod

Para distribuciones basadas en RPM como CentOS, vale la pena saber que los módulos se cargan directamente desde el archivo httpd.conf. Comienza por crear una copia de seguridad del archivo httpd.conf. A continuación, abre el archivo en tu editor preferido y simplemente comenta con (#) cualquiera de los módulos que no sean necesarios.

Para crear una copia de seguridad usa este comando:

cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.YYYY-MM-DD.bak

A continuación, realiza las modificaciones:

/etc/httpd/conf/httpd.conf vim

La documentación oficial de Apache 2.4 trae la lista de los módulos mínimos indispensables para el funcionamiento:

mod_mime
mod_dir
mod_log_config

Puedes técnicamente desactivar el módulo mod_log_config… pero te quedará sin ningún registro de eventos, algo nada recomendable. Esta configuración no se ejecutará en los sitios HTML estáticos más básicos. La configuración del módulo es totalmente dependiente de lo que necesita el servidor para hacer su trabajo.

Un mínimo de configuración del módulo de Apache para un sitio de WordPress, por ejemplo, podría ser algo como esto:

mod_alias
mod_authz_host
mod_autoindex
mod_deflate
mod_dir
mod_expires
mod_headers
mod_log_config
mod_mime
mod_negotiation
mod_rewrite
mod_setenvif

Esto trae algunas adiciones a los tres módulos originales y la configuración de WordPress en realidad puede requerir más módulos dependiendo de la configuración de tu sitio. Por ejemplo, si tienes una conexión SSL activa, también necesitas mod_ssl.

Si no estás familiarizado con los módulos individuales (o no te apetece investigar para saber lo que hace cada uno), todavía puedes experimentar con la configuración de tu sitio mediante la desactivación de módulos en secuencia y luego probar el sitio para determinar lo que funciona y lo que no.

Conoce tu MPM

Los módulos de procesamiento múltiple («MPM») definen la forma en que se manejan las solicitudes de Apache. Con el fin de obtener la experiencia más eficiente y fiable de tu servidor es importante utilizar la configuración que mejor se adapte a tu caso. Los tres módulos MPM más comunes son el «Prefork», el «Worker» y el recientemente introducido «Event».

Lista tus módulos MPM actuales:

Debian/Ubuntu-
apachectl -V | grep -i mpm

RPM –
httpd -V | grep -i mpm

Para cambiar tus MPM, activa el módulo adecuado. Por ejemplo, si estás usando Ubuntu y desear probar Prefork en lugar de Worker, usa:

a2dismod mpm_prefork
a2enmod mpm_worker

Y a continuación, comprueba que se ha producido el cambio:

apachectl -V | grep -i mpm

Prefork

Prefork (Pre-bifurcación) es el MPM más antiguo pero aún así es una configuración muy popular. Prefork maneja los trabajos HTTP mediante la creación de procesos secundarios para servir a esas solicitudes una por una. Como las solicitudes entran, Prefork intenta crear un proceso hijo con piezas que pueden esperar para nuevas solicitudes. Este sistema permite que el servidor permanezca libre para manejar las solicitudes adicionales mediante la creación de más procesos secundarios según sea necesario.

Prefork funciona muy bien hasta que se encuentra con muchas conexiones simultáneas, algo que incluso los usuarios individuales pueden generar muy rápido debido a la forma en que operan los navegadores modernos. En términos generales, la principal ventaja de Prefork es que es compatible con la mayoría de las configuraciones y es potencialmente muy eficiente, incluso más rápido que los MPM de encolado Worker y Event, siempre y cuando no sea necesario servir una gran cantidad de solicitudes simultáneas.

Utiliza prefork si necesitas una gran cantidad de módulos y no quieres preocuparte por la compatibilidad (o multi-hilo, es decir, cuando un código funciona correctamente durante la ejecución simultánea de múltiples hilos).

Muchos módulos populares no son compatibles con el proceso de cola utilizado por los módulos MPM Worker y Event, incluyendo mod_php, que todavía se utiliza comúnmente a pesar de la introducción de formas más eficientes para servir PHP. Así que revisa tus módulos para garantizar la compatibilidad del hilo mediante el uso de la documentación de Apache. También puedes considerar el uso de Prefork si necesitas un sitio que funcione de manera muy eficiente y no esperas gran cantidad de tráfico.

Worker / Event

Los módulos MPM Worker y Event utilizan múltiples hilos, de manera que pueden manejar bastantes más solicitudes simultáneas al permitir que los procesos secundarios descarguen procesos adicionales para las solicitudes. Esto difiere significativamente de Prefork, que sólo permite una solicitud para ser manejada en cada momento por cualquier proceso dado.

Mediante el uso de un MPM multi-hilos, puedes aumentar el rendimiento de tu servidor un poco, sobre todo en sitios de alto tráfico.

Los sitios de bajo tráfico son menos propensos a mostrar un cambio ya que es menos probable que se afecten los picos de solicitudes o se vean obligados a utilizar la memoria de intercambio de Prefork. Apache 2.4 introdujo Events, que es similar a Worker, salvo que se pueden utilizar procesos adicionales para manejar partes de las solicitudes antes de cerrar una conexión.

De acuerdo con la documentación de Apache, es aceptable utilizar Event donde el módulo Worker también es compatible. Event simplemente trae de nuevo las solicitudes de procesamiento de forma idéntica a Worker si se produce una incompatibilidad.

Usa MPM Worker o MPM Events si sabes que tu configuración es segura para los subprocesos. Si estás usando módulos no compatibles con el proceso, es posible que desees considerar otras alternativas.

Por ejemplo, en el caso de mod_php, que es de uso común, se podría utilizar en su lugar FastCGI y PHP-FPM. Este cambio no sólo te trae beneficios adicionales al permitirte usar un MPM multi-hilos, sino también el beneficio de un servicio más eficiente para la entrega de PHP.

En Conclusión

Estos son algunos aspectos pequeños pero ingeniosos para acelerar tu instalación de Apache. ¿Quieres otros consejos? Suscríbete a nuestro Resumen Tecnológico Semanal y recibe las notas más actuales directamente en tu correo.