¿Qué es el servicio Keep-Alive y cómo ayuda a tu web?
La velocidad de respuesta de las páginas web influye positivamente en la experiencia de usuario e, incluso, puede mejorar también el posicionamiento SEO de las páginas web. Uno de los factores que pueden ayudar a aumentar el rendimiento de tus sitios es el servicio Keep-Alive.
¿Qué es Keep-Alive?
Keep-Alive es una funcionalidad incorporada en el protocolo HTTP que permite mantener una conexión persistente entre el servidor y el cliente. Esto significa que cuando el navegador solicita nuevas páginas o recursos al servidor, en lugar de abrir una nueva conexión para cada recurso, se reutiliza la misma conexión previamente abierta.
Gracias a Keep-Alive se puede mejorar el rendimiento de los sitios web, ya que junto con una página habitualmente tienes que transferir numerosos archivos (imágenes, hojas de estilo o scripts), que se podrán enviar en menos tiempo.
¿Cómo funciona el servicio Keep-Alive?
Ahora que ya conoces la esencia de Keep-Alive, vamos a profundizar en su funcionamiento y cómo este servicio consigue mejorar la eficiencia de nuestra web.
Mecanismo de persistencia de conexión
Cuando un cliente web, generalmente el navegador, realiza una petición a un servidor se establece una conexión TCP/IP. Ese establecimiento requiere de diversos pasos en los que el cliente y el servidor realizan los procedimientos marcados por el protocolo HTTP.
Sin Keep-Alive, cada recurso requerido por el navegador (como las imágenes o los scripts) requiere una nueva conexión, lo que agrega latencia para transferir cada uno de los elementos que forman parte de una web. Con Keep-Alive se reutiliza la misma conexión TCP, lo que reduce la cantidad de conexiones que el servidor debe crear y cerrar.
Comparación entre conexiones Keep-Alive y Non-Keep-Alive
Estas son las diferencias fundamentales entre una conexión Keep-Alive y una Non-Keep-Alive:
- En una configuración Non-Keep-Alive, cada recurso necesita abrir y cerrar su propia conexión. En una conexión Keep-Alive permite mantener la conexión abierta para todas las peticiones de recursos.
- Cada conexión aumenta significativamente la carga del servidor y los tiempos de respuesta. Por lo tanto, Keep-Alive permite ahorrar tiempo y recursos en comparación con las configuraciones Non-Keep-Alive.
Beneficios del servicio Keep-Alive para tu web
Si has entendido cómo funciona Keep-Alive podrás deducir los beneficios que nos aporta, gracias al ahorro en la creación de conexiones. No obstante, vamos a repasarlos a continuación.
Mejora en el rendimiento y velocidad del sitio
El uso de Keep-Alive reduce la latencia, al evitar la necesidad de establecer nuevas conexiones para cada recurso que se desea transferir. En el contexto del tráfico web, donde se transfieren generalmente decenas o incluso cientos de archivos por página, es especialmente importante, ya que en el global hace que las páginas puedan renderizar antes en el navegador web.
Reducción de la carga en el servidor
Al reutilizar las conexiones existentes, si el servidor está configurado con Keep-Alive se reduce una cantidad de trabajo notable, ya que no se requiere establecer y cerrar conexiones repetidamente. Esto se traduce en una menor carga del CPU en el servidor y un uso más eficiente de los recursos en general de la máquina.
Mejora de la experiencia del usuario
Como hemos dicho antes, las velocidades de carga rápidas hacen que mejore la experiencia de usuario. Esto es importante porque el usuario será proclive a visitar varias páginas del sitio, lo que disminuye la tasa de rebote y aumenta el tiempo de permanencia. Todos estos factores son positivos para un buen SEO. Incluso hoy se sabe que la velocidad de los sitios web es un factor tenido en cuenta por el algoritmo de posicionamiento de Google.
Configuración del servicio Keep-Alive en servidores web
Ahora vamos a explicarte cómo puedes configurar el servicio Keep-Alive en los servidores web más comunes.
Activar Keep-Alive en Apache
Para activar Keep-Alive en un servidor Apache, es necesario modificar el archivo de configuración principal (httpd.conf). Busca la línea KeepAlive y asegúrate de que esté establecida en On.
Podrás encontrar un código de configuración como este:
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
Esto permitirá que se mantengan abiertas hasta 100 solicitudes con un tiempo de timeout de 5 segundos para cada conexión.
Por supuesto, también podrías definir esta configuración a nivel de virtual host, de modo que afectase solamente a uno de los dominios. Podrías usar un código como este:
<VirtualHost *:80> ServerName ejemplo.com DocumentRoot /var/www/ejemplo.com KeepAlive On MaxKeepAliveRequests 50 KeepAliveTimeout 3 </VirtualHost>
Además, puedes configurar también las conexiones Keep-Alive a nivel de archivo .htaccess. Para ello puedes añadir las siguientes líneas de configuración:
<IfModule mod_headers.c> Header set Connection keep-alive </IfModule>
Esta configuración hace que el encabezado Connection esté configurado con el valor keep-alive, lo que permite mantener las conexiones abiertas, tal como hemos descrito.
Configurar Keep-Alive en Nginx
En Nginx, la configuración de Keep-Alive se gestiona a través de los parámetros keepalive_timeout y keepalive_requests. Esta configuración la estableces generalmente en el archivo nginx.conf, con lo que se aplica a nivel de todo el servidor
keepalive_timeout 35; keepalive_requests 100;
Esto permite que una conexión se mantenga abierta durante 35 segundos. Además se indica que se manejen hasta 100 peticiones antes de cerrarse.
También es perfectamente posible definir la configuración Keep-Alive a nivel de un bloque de servidor específico (bloque server{}), lo que permitiría establecerla únicamente para dominios particulares.
Consideraciones de configuración para tener en cuenta
A pesar que en principio Keep-Alive mejora la optimización también creemos importante mencionar que se debe ajustar los parámetros de Keep-Alive según las necesidades del servidor y del tráfico del sitio.
Por ejemplo, si los tiempos de espera son demasiado largos, las conexiones inactivas podrían consumir recursos innecesarios. Si son demasiado cortos, se pierde el beneficio de la persistencia de la conexión.
Problemas comunes y soluciones relacionadas con Keep-Alive
Para terminar, vamos a abordar algunos problemas comunes que pueden surgir al implementar Keep-Alive, y cómo podrías solucionarlos en tu servidor.
Problemas de conexión y timeout
Uno de los problemas más comunes con las configuraciones Keep-Alive es que las conexiones pueden permanecer abiertas demasiado tiempo. Para evitar casos indeseados se deben configurar adecuadamente los valores de timeout. Con ello evitaremos problemas de rendimiento, especialmente si hay muchas conexiones simultáneas que consumen los recursos del servidor.
Ajustes de configuración para optimizar Keep-Alive
Para optimizar Keep-Alive, debemos considerar el tráfico de nuestro sitio. Sitios con una gran cantidad de usuarios simultáneos pueden beneficiarse de reducir el timeout de Keep-Alive, lo que permite liberar recursos más rápidamente. Por otro lado, sitios que cargan muchas imágenes podrían beneficiarse de tiempos de espera más largos, de modo que se pueda garantizar que todos los archivos se hayan transferido en la misma conexión.