Instalar Varnish en Debian

Hace unos días tuve que instalar Varnish en una de las máquinas de desarrollo para poder emular el entorno de producción, lo cierto es que fue mucho más sencillo de lo que yo esperaba, no digo con esto que me considere un experto en Varnish en estos momentos, pero lo cierto es que la primera toma de contacto para el entorno de trabajo ha sido muy positiva.

Si estáis buscando una empresa que os de servicio de Varnish y buscáis a alguien que os configure un entorno de alto rendimiento con este Proxy os recomiendo contactar con Sb It Media, una empresa experta en lidiar con Varnish que os puede ofrecer el mejor servicio adecuado a vuestras necesidades.

¿Qué es Varnish?

Antes de instalar Varnish vamos a ver que es, creo que la definición de la Wikipedia es muy acertada:

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

Lo que dice la Wikipedia es que Varnish es un servicio que se encuentra entre el usuario y el servidor web instalado, de tal forma que si el recurso solicitado por el usuario lo tiene almacenado Varnish lo devolverá al usuario rápidamente, si no lo tiene en memoria lo solicita al servidor web, y en la respuesta que da el servidor web lo almacena en memoria.

Flujo de Varnish Cache

Instalar el repositorio de Varnish

El primer paso para instalar Varnish es agregar el repositorio a nuestra máquina:
sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

Una vez hemos agregado el repositorio a nuestra maquina lo instalamos:
sudo apt-get update && sudo apt-get install varnish

Configurar Varnish

Antes de empezar hay que tener en cuenta que el puerto por defecto para las peticiones http es el 80, y es el puerto que tenemos configurado el servidor web, por lo tanto si queremos que Varnish escuche las peticiones tendremos que configurar que escuche en el puerto 80, y nuestro servidor web lo moveremos a otro puerto que no utilice ningún servicio.

El primer paso es editar el archivo de configuración de Varnish:
vim /etc/varnish/default
y dejamos la configuración de la opción backend default de la siguiente manera:

backend default {
     .host = "127.0.0.1"; #Es la ip donde tiene que buscar el servidor web
     .port = "8080"; #Es el puerto que esta escuchando el servidor web
     .connect_timeout = 600s; #Los segundos antes de que de timeout
}

Luego actualizamos el archivo varnish
vim /etc/default/varnish

y sustituimos:

DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

por

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Una vez guardado los cambios tenemos que cambiar la configuración del puerto del servidor web, en el caso de Apache lo hacemos de la siguiente manera:
vim /etc/apache2/sites-available/default
Y simplemente sustituir
<VirtualHost *:80>
por
<VirtualHost *:8080>

Y en la configuración del servidor web Apache:
vim /etc/apache2/ports.conf
cambiamos

NameVirtualHost *:80
Listen 80

Por

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Únicamente nos queda agregar el módulo de apache rpaf para que Apache reciba correctamente la IP de usuario y no la IP local.
apt-get install libapache2-mod-rpaf

Una vez hecho esto reiniciamos Apache y reiniciamos Varnish para actualizar los cambios.

Varnish y Drupal

Existen varios módulos que permiten que Drupal y Varnish se hablen, es cierto que sin dichos módulos funciona perfectamente Varnish por delante de Drupal y lo cachea sin problemas, pero los siguientes módulos nos permiten que tengamos "cierto control" de cuando se limpian los elementos cacheados en Varnish.
El módulo Varnish permite borrar registros de Varnish, el módulo Purge permite borrar registros de Varnish. La diferencia entre ambos es que mientras que el módulo Varnish utiliza el puerto de administración de Varnish para limpiar la cache, el módulo Purge utiliza una petición HTTP usando Purge

Bibliografía

Todas las webs que he leído para conseguir en Vagrant Varnish:
https://www.howtoforge.com/putting-varnish-in-front-of-apache-on-ubuntu-debian
http://www.unixmen.com/install-and-configure-varnish-cache-for-apache-on-debian-7/
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-varnish-with-apache-on-ubuntu-12-04--3
https://www.varnish-cache.org/installation/debian
https://www.digitalocean.com/community/tutorials/how-to-configure-varnish-for-drupal-with-apache-on-debian-and-ubuntu