Como el otro día comenté algo sobre Varnish y un nuevo plugin, y alguno ya preguntasteis en los comentarios, creo que ya iba siendo hora de explicar lo que es Varnish, un sistema de cache realmente potente, fantástico para instalaciones WordPress con mucho tráfico, y que como ya puedes imaginar uso aquí en Ayuda WordPress.
Vamos a ello pues …
Índice de contenidos
¿Qué es Varnish?
Varnish Cache es un acelerador web, o un sistema de cache HTTP de reverse proxy. Se instala en cualquier servidor que sirva (vale, es redundante) HTTP y se configura para que cachee sus contenidos. Según algunos estudios acelera el servicio en un 70%.
Cachear una web, por si alguien no lo sabe aún, es almacenar una copia de la misma para que sea la que vean los visitantes futuros. En el caso de Varnish y WordPress, lo que consigue es servir páginas cacheadas (almacenadas) de tu WordPress para que no tenga este que hacer llamadas a la base de datos cada vez que alguien visita tu web. Esto reduce la carga del servidor ya que simplemente sirve una copia única de las páginas a todos los visitantes sin tener que buscar las mismas imágenes y servicios para cada contenido y cada visitante.
Además, Varnish cachea las páginas en memoria virtual, para que tu sitio cargue mucho más rápido, lo que de paso mejora tu SEO, pues Google tiene estimado que por cada medio segundo de tiempo de carga adicional de una web esta recibe una media de un 20% de menos visitantes (fuente). De este modo, reduciendo con Varnish de manera importante el tiempo de carga de página pueden aumentar tus visitas y mejorar tu ranking en los buscadores, algo siempre a tener en cuenta.
La gente de Varnish ha publicado un vídeo muy simple, al tiempo que explicativo que seguro te ilustra sobre lo que hace …
http://www.youtube.com/watch?v=x7t2Sp174eI
Instalando Varnish
Varnish es un software libre así que no tienes excusas para instalarlo ahora mismo. Se ejecuta en Linux, preferiblemente en FreeBSD, pero puede funcionar igualmente en otras plataformas. Una vez lo instales puedes personalizarlo para definir cuantas peticiones entrantes gestionará mediante el Idioma de Configuración de Varnish (Varnish Configuration Language o VCL).
Varnish está pensado para que sea flexible, para que lo instales pensando en un sitio concreto en mente, y lo adaptes de manera personalizada a el.
Lo ideal es empezar con una configuración básica de Varnish, para más adelante ir probando pequeños cambios y ver como afectan al rendimiento del sitio concreto. Hay varias subrutinas que le dicen a Varnish como responder a las peticiones entrantes y salientes, a los errores, etc.
Así que vamos a empezar con una configuración básica, para luego echar un vistazo a las funciones básicas del VCL y luego ya tu lo tuneas a tu gusto.
Paso a paso
Poner en marcha Varnish es bastante sencillo. Partiendo de una base de, digamos, Apache en un sistema Debian (la mayoría de los servidores Linux), aunque también funciona en el resto, empezaríamos con este comando:
apt-get install varnish
Primero hay que configurar Apache para que «escuche» el puerto 8080 de localhost. Varnish podrá entonces escuchar el puerto 80 (por donde vienen las visitas). En el archivo /etc/apache2/ports.conf, edita estos ajustes:
NameVirtualHost 127.0.0.1:8080 Listen 127.0.0.1:8080
Para que se inicie Varnish (por defecto no lo hace), edita lo siguiente en el archivo /etc/default/varnish
START=yes DAEMON_OPTS=”-a DIRECCION_IP_EXTERNA:80 \ -T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G”
Reemplaza DIRECCION_IP_EXTERNA con la IP de tu dirección IP externa. También puede ser una dirección interna si tu servidor está tras un balanceador de carga o algo como NGINX. Este ajuste controla qué dirección IP y puerto quieres que Varnish escuche y vigile.
Una vez echo lo anterior edita el archivo /etc/varnish/default.vcl, que debería ya existir, con mucho de su contenido comentado (no activo). Empiezaremos por cambiar el backend default.
backend default { .host = “127.0.0.1”;</p> .port = “8080”;</p> }
Ahora Varnish ya sabe que Apache está escuchando el puerto 8080 y la interfaz de localhost, para que podamos empezar a usar las funciones. La mayoría del trabajo se hará con vcl_recv y vcl_fetch, y si no llamas a una acción en esta subrutina y Varnish llega al final, ejecutará el código que encuentre en el archivo default.vcl.
Note: no cachees nunca wp_admin, wp_login, o rutas similares.
Así es como trabaja – las 4 básicas subrutinas de tu configuración de Varnish que necesitas para gestionar peticiones serán:
sub vcl_recv
Esta llamada se hace al comienzo de una petición, y le dice a Varnish qué hacer con esa petición en concreto: si tiene que servirla, cómo servirla, y qué respaldo usar.
Varnish recibe una petición de tu navegador, y entonces vcl_recv decide hacer una de 3 costs con ella: vcl_hash, vcl_pass, y vcl_pipe (ahora lo explico). Puedes cambiar la petición si quieres, alterar las cookies o quitar la cabecera de la petición.
sub vcl_fetch
A vcl_fetch se la llama después de que se haya recuperado un documento con éxito. Usas esto para alterar las cabeceras de respuesta, lanzar el procesamiento ESI o para tratar de alternar entre servidores de respaldo si falla la petición.
El objeto solicitado, req, está todavía disponible, y ahí también hay una respuesta de respaldo, beresp, que contiene las cabeceras HTTP del respaldo.
sub vcl_hash
Puedes llamar al hash_data del dato que quieras añadir al hash. Esta subrutina puede terminar con una llamada a return() con una de estas keywords: hash o proceed.
sub vcl_deliver
Llamas a esto antes de que el objeto cacheado se entregue al cliente. Esto puede terminar con deliver, error code, o restart. Deliver entrega el objeto al cliente, error devuelve el código de error específico al cliente y abandona la petición, restart reiniciará la transacción e incrementará el contador de reinicio.
Acciones
Hay ciertas acciones que puedes realizar en cada subrutina cuando personalizas Varnish:
pass
Pasa la petición y su consiguiente respuesta hacia el servidor de respaldo, sin cachear. Puedes llamar a pass tanto en vcl_recv como en vcl_fetch.
lookup
Se hace la petición desde vcl_recv para entregar contenido desde la cache aunque la petición indique que debe pasarse la misma. Puedes llamar a lookup desde vcl_fetch.
pipe
Desde vcl_recv, pipe cortocircuita al cliente y las conexiones de respaldo, y Varnish simplemente se queda ahí pasando los datos a un lado y a otro, registrando los datos, así que los registros serán incompletos. Ten cuidado ya que un cliente HTTP 1.1 puede enviar varias peticiones en la misma conexión, y así podrías hacer que Varnish añada una cabecera «Connection:close» antes de hacer la llamada a la pila de conexiones.
deliver
Entrega el objeto cacheado al cliente. Normalmente se le hace la llamada desde vcl_fetch.
esi
Hace un proceso ESI del documento adquirido.
Si quieres saber más sobre VCL no te pierdas este tutorial, que también contiene funciones que puedes realizar en tu sitio.
Configuraciones de ejemplo
Espero que estés aprendiendo algo (o mucho) de Varnish, pero la mejor manera de empezar a jugar con el es ver algunos ficheros de configuración de ejemplo.
La web de la comunidad de Varnish tiene una enorme colección de configuraciones de ejemplo, que son un buen sitio para empezar a hacer las tuyas. Incluso hay algunas configuraciones de ejemplo estupendas para WordPress de fetch y receive en Github.
Creo que llegado este punto huelga decir que Varnish es muy personalizable, y que puede hacer maravillas para cualquier instalación WordPress, especialmente las de alto tráfico. También, hay que reconocerlo, tampoco es para cualquiera, al menos hay que tener conocimientos de conexión con servidores mediante Linux.
Lo mejor es que, con poco esfuerzo y gratis, puedes configurar una cache realmente potente con Varnish, basándote en los permisos de usuario, en el tipo de usuario o lo que se te ocurra.
Si quieres más pruebas del poder de Varnish, no solo Ayuda WordPress lo usa, también Facebook, y creo que no hay mejor prueba de web de alto tráfico que esta tremenda red social ¿no crees?.
Plugins WordPress
Hay, como ya comenté hace días, plugins WordPress que te permiten configurar o gestionar el comportamiento de Varnish en WordPress, los que encontrarás serán estos:
- Varnish HTTP purge – simplemente limpia la cache de cualquier contenido que modifiques, para entregar la última versión.
- Varnish purges – muy similar al anterior
- WP Varnish – otro gestor de la cache de Varnish
- WordPress Varnish – otro plugin que vacía la cache de Varnish cuando añades o actualizas contenido de tu sitio.
- WordPress Varnish as a service – estupendo plugin, del que ya hemos hablado
Bueno que ¿te animas a probar Varnish o ya lo has usado?
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
¿Sabes si puede crear conflictos con memcached?
Suena tentador pero no sé si me animo a meter mano con todo eso en mi hosting compartido… Si me mando una cag… los de bluehost son capaces de bajarme el sitio
Quiero instalarlo en mi web. Pero se puede instalar en cualquier server? O tiene que ser en un dedicado? Es que no entiendo muy bien en que parte hay que meter la orden, hay un terminal o algo asi?? Si me pudieras ayudar, me alegraria.
Excelente articulo, ahora mismo me pongo a instalarlo.
Seg veo solo esta para Linux Para IIS nada 🙁
Hola
Me pasa lo mismo que a los compis, me temo que hostgator no me pondra esto si no estoy en un dedicado.
Salu2
Buenas a todos, varnish se puede instalar en cualquier vps con linux, Varnish recomiendo Fedora, pero yo normalmente lo monto sobre Centos 6.4 y no hay problemas. Lo ideal es retocar parametros de ulimits en el kernel y añadir cache en memoria ram. Esto es muy sencillo de hacer, se edita el fichero /etc/sysconfig/varnish y se añade una linea -s malloc, 512M
Varnish administra automaticamente la cache y prioriza la que hay en memoria, guardando ahí lo que mas se pida.
Un saludo.
Tengo un VPS privado y he pedido que me instalen Varnish y realmente anda bien, mi duda es si debo o no desinstalar mi plugin de cache (FAST WP-CACHE) ya que estaría haciendo doble caché cierto? Y otra duda, le pedí a la gente del servidor instalar SSL ya que Google dice que es mejor incluso para el SEO pero luego de instalar el SSL apareció todo tipo de problemas, la gente de soporte lo desintaló porque no podía hacerlo andar. Luego leyendo parece que SSL no anda con Varnish. Puede ser? Yo no soy técnico pero busco información para aprender y para ver si el lunes volvemos a intentar con los técnico o directamente me olvido del SSL