Cache de contenidos web con Varnish

  Linux, Manuales

Varnish es un acelerador de aplicaciones web, también conocido como caché de proxy http inversa. Se instala delante de cualquier servidor web y se configura para almacenar en caché una copia del recurso solicitado. Ideado para aumentar el rendimiento de las aplicaciones web.

Una de las características clave, además de su rendimiento, es la flexibilidad de su configuración de lenguaje VCL. VCL permite determinar las políticas a tomar sobre las peticiones de entrada. En esta política se puede decidir qué contenido desea servir, desde donde se desea obtener el contenido y la forma en que la solicitud o la respuesta debe ser alterada.

Sitio web Oficial de Varnish: https://www.varnish-cache.org

A continuación veremos como se instala y configura Varnish en un servidor Debian.

Configuración de Apache

Apache por defecto está configurado para escuchar en el puerto 80 (puerto web), pero en este caso quien va a atender las peticiones será Varnish ya que sólo accederán a Apache las peticiones cuyo contenido no se encuentre en cache.

Por este motivo vamos a modificar el puerto de escucha de Apache por el 8888 al que sólo accederemos como “localhost” (127.0.0.1).

root@javierandres:~# vim /etc/apache2/ports.conf
....
 #NameVirtualHost *:80
 #Listen 80
 NameVirtualHost 127.0.0.1:8888
 Listen 127.0.0.1:8888
.....

Modificamos en puerto de TODOS los VirtualHost.

root@javierandres:~# vim /etc/apache2/sites-enabled/default
 VirtualHost 127.0.0.1:8888 --> dentro de 
 ServerAdmin webmaster@localhost

Reiniciamos Apache para que repliquen los cambios.

root@javierandres:~# service apache2 restart

Comprobamos si los cambios que hemos realizado han replicado correctamente.

root@javierandres:~# netstat -lnp
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1570/sshd
 tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 6527/apache2
 tcp6 0 0 :::22 :::* LISTEN 1570/sshd

Instalación y configuración de Varnish

Antes de comenzar la instalación de Varnish tenemos que instalar el paquete “apt-transport-https“, este paquete nos permite utilizar repositorios que utilizar el protocolo seguro https:

apt-get install apt-transport-https

A continuación añadimos el repositorio que contiene el paquete Varnish:

 
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
echo "deb https://repo.varnish-cache.org/debian/ wheezy varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list

Lanzamos un “update” para actualizar el listado de repositorios e instalamos Varnis:

 
apt-get update
apt-get install varnish

Si utilizas otra distribución de linux distinta a Debian, aquí tenéis más información: https://www.varnish-cache.org/docs

Comenzamos la configuración de Varnish, en este paso vamos a asignar la memoria RAM para cache, en nuestro caso 512Mb y el puerto por el que escuchará Varnish (80, puerto web por defecto).

root@javierandres:~# vim /etc/default/varnish
...
DAEMON_OPTS="-a :80 \
 -T localhost:6082 \
 -f /etc/varnish/default.vcl \
 -S /etc/varnish/secret \
 -s malloc,512m"
...

En este paso, vamos a indicarle el lugar donde se encuentra el servidor web, en nuestro caso Apache, y el puerto por el que escucha nuestro Apache 8888. Recordemos que el servidor Apache lo tenemos instalado en el mismo servidor que Varnish con lo ue introduciremos “localhost” y el puerto por el que escucha Apache 8888. Recordar que Varnish escucha por el puerto 80.

root@javierandres:~# vim /etc/varnish/default.vcl
backend default {
 .host = "127.0.0.1";
 .port = "8888";
}
...

Este último fichero permite muchas configuraciones gracias a las reglas VCL (Varnish Control Language), en nuestro caso sólo vamos a modificar esos dos parámetros aunque Varnish da para mucho más. Ejemplos de ficheros VCL y un manual de uso de VCL.

Una vez reiniciados los servicios Varnish y Apache, comprobamos que los cambios que hemos realizado han replicado correctamente.

root@javierandresroy:~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6082 0.0.0.0:* LISTEN 2623/varnishd 
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2625/varnishd 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1570/sshd 
tcp 0 0 127.0.0.1:8888 0.0 donde puedo comprar viagra sin receta.0.0:* LISTEN 6527/apache2

Comprobación rendimiento Varnish

Por último para comprobar si nuestro sistema de cache se comporta correctamente podemos ejecutar la instrucción varnishstat que nos permitirá ver en tiempo real muchos datos relativos al rendimiento y el estado de los servicios. Varnishstat es una especie de top.

root@javierandres:~# varnishstat

Finalmente quería agradecer a mi compañero Manuel Gracia por enseñarme este programa y ayudarme en su configuración.

LEAVE A COMMENT