Guía de configuración de Varnish

En Tutoriales y Guías por

Pues aquí estamos con este nuevo tutorial tras explicar como instalar Varnish ha llegado la hora de explicar como configurar Varnish en Ubuntu, aunque habrá algunas partes genéricas sobre Varnish que será aplicable en cualquier distribución Linux.

Guía de configuración de Varnish en Ubuntu.

Cómo ya dijimos, esta guía para configurar Varnish está basada en Ubuntu pero será totalmente válida para otras distribuciones Linux como Debian o CentOS, teniendo en cuenta que la localización de los archivos de configuración y algún comando puede cambiar de una distribución Linux a otra, pero salvando esas diferencias, el concepto es el mismo.

Antes de empezar tenemos que tener claro como vamos a configurar nuestro servidor, para esto voy a mostrar la configuración del servidor original y la configuración después de instalar y configurar Varnish. Esto lo voy mostrar con unos esquemas en las siguientes imágenes:

Servidor Apache estándar a la escucha en el puerto 80

Guía de configuración de Varnish en Ubuntu

Servidor Apache a la escucha en el puerto 8080 y Varnish manejando las peticiones HTTP en el puerto 80

Configuración de Varnish en Ubuntu

De estos esquemas, vamos a comentar un poco el segundo, podemos ver como hemos colocado entre el usuario y Apache el programa Varnish. Ahora Varnish escucha en el puerto 80 todas las peticiones que los usuarios hagan a través de sus navegadores y será Varnish el encargado de procesar estas peticiones. Al mismo tiempo Varnish se encargará de solicitar los recursos que pida el usuario a Apache a través del puerto 8080.

Tenemos que localizar el archivo de configuración de Apahe con el nombre ports.conf, en Ubuntu localizado en /etc/apache2/ports.conf

Editamos este archivo de forma que el parámetro “Listen” escuche en el puerto 8080. Hay dos opciones que se os pueden mostrar: “Listen 80” o “Listen 127.0.0.1:80” , dependiendo de la versión de Ubuntu, pero lo que tenemos claro es que cambiaremos el puerto 80 por el 8080 quedando esos parámetros así: “Listen 8080” o “Listen 127.0.0.1:8080”.

La diferencia está en que si no ponemos la IP 127.0.01 entonces Apache seguirá siendo accesible desde cualquier IP a través del puerto 8080.

También se puede dar el caso de que tengáis la siguiente línea en el archivo ports.conf: “NameVirtualHost 127.0.0.1:80” que también tendréis que cambiarla por “NameVirtualHost 127.0.0.1:8080”.

A continuación hay que modificar los ficheros de configuración de los VirtualHosts. La localización de los archivos de configuración de los diferentes Virtualhosts están en el directorio /etc/apache2/sites-available/

Tendremos que editar todos los archivos de nuestros VirtualHosts, de forma que si tenemos “VirtualHost 127.0.0.1:80” pase a “VirtualHost 127.0.0.1:8080” y si tenemos “VirtualHost *:80” pase a “VirtualHost *:8080”.

La diferencia está en que si ponemos un asterisco, podrá acceder cualquier IP y si especificamos una IP (en este caso la 127.0.0.1) sólo esta podrá acceder.

Ya tenemos Apache funcionando en el puerto 8080, ahora nos queda la configuración de Varnish y recordemos que Varnish ahora trabajará en el puerto 80.

Configurar los parámetros de arranque de Varnish.

Para configurar Varnish primero hay que establecer los parámetros de arranque, para ello vamos a ir hablando detenidamente de cada uno para después proponer varias configuraciones de parámetros de arranque y podamos elegir el que más se ajuste a nuestras necesidades.

Los parámetros de arranque se modifican con la opción DAEMON_OPTS, que puede recibir los siguientes parámetros (ojo hay que diferenciar mayúsculas y minúsculas en los nombres de los parámetros):

  • Parámetro -a : el formato de este parámetro es IP_DONDE_ESCUCHAR:PUERTO, podemos omitir el parámetro de IP_DONDE_ESCUCHAR para que escuche en todas las IPs.
  • Parámetro -T : el formato es IP_DONDE_ESCUCHAR:PUERTO, este parámetro indica la IP y el puerto en el que escuchará la interfaz de administración de Varnish Cache.
  • Parámetro -t : especifica el TTL (Time To Live) por defecto.
  • Parámetro -p : no hace falta usarlo a menos que seamos usuarios avanzados. Con el podemos especificar una serie de valores como: thread_pool_min, thread_pool_max, thread_pools, listen_depth, session_linger, lru_interval.
  • Parámetro -w : nos permite establecer separados por comas tres valores relacionados con los hilos que usa Varnish numero_minimo_de_threads, numero_maximo_de_threads, timeout_de_threads. Por defecto tampoco necesitamos ajustar estos valores.
  • Parámetro -s : este parámetro es importante ya que nos permite establecer dinde queremos almacenar el cache (memoria o disco duro) y el tamaño del mismo. Veamos los siguientes ejemplos para entenderlo mejor:
    • -s malloc,1G : con este parámetro estamos indicando que el cache se almacena en la memoria y de tamaño 1Gb.
    • -s file,/var/lib/varnish/sathost/varnish_storage.bin,1G : con este parámetro estamos indicando que se use un archivo para almacenar el cache de 1Gb de tamaño. El tamaño también lo podemos especificar con un porcentaje, por ejemplo cambiariamos el 1Gb de los ejemplos anteriores por un 50% -s file,/var/lib/varnish/sathost/varnish_storage.bin,50% y esto indicaría que se usase un 50% del tamaño del disco para el cache.
  • Parámetro -f : este parámetro indica la localización del archivo de configuración de Varnish. Por ejemplo -f /etc/varnish/default.vcl indica la localización del archivo vcl de configuración.
  • Parámetro -S : indica la localización del archivo secreto que es empleado para la autentificación de la consola Varnish.

Veamos algunos ejemplos de configuraciones de parámetros de arranque:

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

Este ejemplo es muy común y establece el uso de 256MB de RAM para cache y el resto de opciones son las ya comentadas localización de archivo de configuración, archivo secreto y el puerto en el que escucha Varnish.

DAEMON_OPTS="-a :80 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/sathost/varnish_storage.bin,1G"

Un ejemplo en el que se establece el uso de un archivo de 1GB como caché junto al resto de opciones que anteriormente comentadas.

El archivo de configuración de Varnish es muy importante y lo trataremos a fondo más adelante ya que tenemos que hablar de VCL (Varnish Configuration Language).

En cuanto al puerto estoy dando ejemplos con el puerto 80 puesto que mi objetivo es configurar Varnish como acelerador de una página web, se puede dar el caso de uso de otros puertos conjuntamente con IPs internas, sobre todo cuando se emplea como balanceador de carga pero ese no es el objetivo de esta guía.

Usar memoria para cache o usar un archivo.

Algunos os estareis preguntando que es mejor, usar memoria para cache o usar un archivo. La teoría dice que cachear en memoria sirve los contenidos de las páginas web más rápido, pero ya sabemos que la memoria en los VPS es bastante limitada y cara por lo que a veces es mejor dejar la memoria libre para el buen funcionamiento del sistema operativo.

Otro factor a tener en cuenta a la hora de tomar la decisión de que método de cache emplear es el tamaño de los elementos que vamos a cachear, por ejemplo si sólo vamos a cachear 20 artículos de un blog wordpress, con 64MB para el cache vamos sobrados, pero si vamos a cachear una blog con más de 20.000 artículos y archivos adjuntos pdf e imágenes de gran resolución, igual la mejor opción es emplear el cache en disco sino disponemos de la RAM suficiente.

En resumen, hay que evaluar los recursos disponibles para decidir que método usar. En varios artículos de análisis sobre Varnish que he podido leer en inglés, afirman que Varnish usando cache en disco es más efectivo a largo plazo, cuando aumenta el ratio de hits en el cache, esto rompe mis teorías pero puede ser cierto ya que hoy en día con los discos SSD se tiene acceso a los datos a muy altas velocidades.

Cuando empleamos una partición para el uso del cache de Varnish es muy recomendable montar dicha partición con las opciones noatime y nodiratime.

VCL: Varnish Configuration Language

Varnish emplea este lenguaje VCL para permitir al usuario gestionar las peticiones con algún tipo de lógica. Esta parte es especialmente extensa y la trataremos en una segunda parte de esta guía de configuración de Varnish.

Comandos útiles para iniciar, parar, reiniciar y recargar Varnish.

Podemos realizar todas estas funciones cuando necesitemos interactuar con Varnish a traves de la consola y así podemos pararlo, reiniciarlo o recargar Varnish. Los comandos son:

  • Iniciar Varnish: service varnish start
  • Parar Varnish: service varnish stop
  • Reiniciar Varnish: service varnish restart
  • Recargar Varnish: service varnish reload

Algunos os estaréis preguntando cual es la diferencia entre reiniciar y recargar Varnish. Cuando reiniciamos Varnish reiniciamos el programa completo apagando y volviendo a encender Varnish, mientras que si lo recargamos, sólo estamos cargando de nuevo la configuración sin apagar Varnish.

Espero que os haya gustado y espero tener cuanto antes lista la segunda parte de la guía de configuración Varnish. Cualquier comentario o duda no dudéis en usar los comentarios.