Mostrando entradas con la etiqueta varnish. Mostrar todas las entradas
Mostrando entradas con la etiqueta varnish. Mostrar todas las entradas

Varnish, configuración avanzada

El otro día comentamos cómo instalar Varnish en nuestro equipo y configurarlo para que cachee contenidos a nivel local, pero también hablamos de que podía hacer de proxy inverso para nuestros sistemas. Es decir, podemos tener un número n de servidores con Apache (por ejemplo) sirviendo una página web y que todo el contenido estático lo sirva Varnish, dejando la parte dinámica en round-robin entre los servidores de backend. Toda la configuración es la misma que la presentada en el post de instalación. Lo único que cambiará será el contenido del fichero /etc/varnish/default.vcl, que contendrá los equipos a los que conectarse.
director www_master round-robin {
   { .backend = { .host = "192.168.0.33"; .port = "http"; } }
   { .backend = { .host = "192.168.0.34"; .port = "http"; } }
}
 
sub vcl_recv {
   set req.backend = www_master;
   remove req.http.X-Forwarded-For;
   set req.http.X-Forwarded-For = client.ip;
}
E incluso una configuración más compleja, con varios virtualhost y varios servidores de backend
director web_master round-robin {
   { .backend = { .host = "192.168.0.33"; .port = "http"; } }
   { .backend = { .host = "192.168.0.34"; .port = "http"; } }
}
 
director mail_master round-robin {
   { .backend = { .host = "192.168.0.37"; .port = "8080"; } }
   { .backend = { .host = "192.168.0.65"; .port = "80"; } }
}
 
director photos_master round-robin {
   { .backend = { .host = "192.168.0.100"; .port = "http"; } }
}
 
sub vcl_recv {
   if (req.http.host ~ "^(mail.|webmail.)?domain.(com)$") {
      set req.backend = mail_master;
   }
 
   if (req.http.host ~ "^(fotos.|photos.)doamin.(com)$") {
      set req.backend = photos_master;
   }
 
   if (req.http.host ~ "^(www.)?doamin.(com)$") {
      set req.backend = web_master;
   }

   remove req.http.X-Forwarded-For;
   set req.http.X-Forwarded-For = client.ip;
}
Leer más

Varnish, cacheando contenido

Varnish es un pequeño servidor que actúa como proxy-caché de nuestro servidor web y que permite reducir notablemente las consultas a disco y por lo tanto acelerar las respuestas de la web. Varnish es por lo tanto un proxy inverso para un servidor web (Apache, Cherokee, etc) que permite a la vez que servir contenidos también mantenerlos en caché, acelerando así las respuestas. Aunque las páginas sean dinámicas y necesiten ser consultas a una base de datos, Varnish lo hace por nosotros, almacenando la página como estática en la memoria para que devolverla al cliente sea inmediato.
Varnish es software libre y está disponible en los repositorios de las principales distribuciones. Como lenguaje de configuración usa VLC (Varnish Configuration Language), un lenguaje propio que permite darle la flexibilidad y personalización que cada entorno necesita.
En este post vamos a configurar Varnish de forma sencilla para que nos cachee los contenidos de un servidor web (Apache) local que tenemos.
  1. Instalación
    Al emplear Debian como sistema operativo tenemos el paquete compilado en los repositorios oficiales.
    shell> apt-get install varnish
    
  2. Configuración de apache
    Como servidor de backend vamos a tener nuestro servidor Apache montado y escuchando en la IP pública o IP de DMZ correspondiente. Puesto que dejaremos que sea Varnish el encargado de servidor la web, es decir, escuchar en el puerto 80 de la IP "pública", configuraremos Apache para que escuche en el interfaz de localhost. Para ello editamos el fichero /etc/apache2/ports.conf dejándolo como sigue.
    NameVirtualHost 127.0.0.1:8080
    Listen 127.0.0.1:80
    
    <IfModule mod_ssl.c>
        Listen 443
    </IfModule>
    
    <IfModule mod_gnutls.c>
        Listen 443
    </IfModule>
    
    Fijaros que en esta configuración sólo cambiamos el puerto 80 de escucha a localhost. Si hay algo sirviéndose en https (puerto 443) será entregado por Apache directamente.
  3. Configuración de varnish
    Ahora que ya tenemos el backend en localhost:80 tenemos que configurar Varnish para que escuche en el puerto 80 de la IP "pública" y que envíe dichas peticiones al backend.
    Lo primero de todo, configurar el comportamiento por defecto del nuevo servicio. En este caso editamos el fichero /etc/default/varnish.
    START=yes
    
    DAEMON_OPTS="-a 192.168.0.33:80 \
        -T 192.168.0.33:6082 \
        -u varnish \
        -g varnish \       
        -f /etc/varnish/default.vcl \
        -S /etc/varnish/secret \
        -s file,/var/lib/varnish/varnish_storage.bin,1G"
    
    Una vez que ya tenemos esto, simplemente queda por crear el contenido del fichero /etc/varnish/default.vcl, que tendrá el comportamiento del servicio propiamente dicho.
    director www_master round-robin {
       { .backend = { .host = "127.0.0.1"; .port = "80"; } }
    }
     
    sub vcl_recv {
       set req.backend = www_master;
       remove req.http.X-Forwarded-For;
       set req.http.X-Forwarded-For = client.ip;
    }
    
    Este fichero es muy simple, puesto que no hay nada especial en él, simplemente indicamos que el proveedor de datos (Apache) está en localhost:80.
  4. Arrancando servicios
    Ahora que ya está todo guardado, simplemente lanzamos los servicios para que nuestro servidor quede nuevamente funcionando, pero con un proxy caché intermedio.
    shell> /etc/init.d/apache2 restart
    shell> /etc/init.d/varnish start
    
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios