:::: MENU ::::

Instalar y configurar Varnish para optimizar Magento

5.00 avg. rating (93% score) - 4 votes

Ideas básicas acerca de Varnish y Magento

Si quieres conocer los aspectos básicos de la integración de Magento y Varnish, puedes comenzar leyendo el artículo Acelerar Magento con Varnish Caché

Instalar Varnish Caché en Debian

Instalar Varnish en tu servidor Linux es muy similar a instalar otras aplicaciones o paquetes. Simplemente utiliza el gestor de paquetes de tu distribución para instalarlo. En el caso de Debian, puedes hacerlo ejecutando:

apt-get install varnish

Aunque normalmente querrás que Varnish escuche en el puerto 80 (situándose de esta forma entre los usuarios y tu servidor apache), tras la instalación Varnish queda configurado en el puerto 6081 por lo que (no seas impaciente) todavía no notarás una mejora en la velocidad ;) La configuración de Varnish se realiza por medio de dos archivos que comentaremos más adelante. Si tu servidor es Debian, una vez instalado Varnish, los archivos de configuración están en las siguientes rutas: Para la configuración del daemon de Varnish necesitarás hacer cambios en este archivo:

/etc/default/varnish

También necesitarás el archivo de «programa» VCL, donde se define el comportamiento que tendrá Varnish para cada petición que reciba. Si utilizas Turpentine, solo necesitarás hacer algunas modificaciones durante esta puesta en marcha inicial. En cualquier caso te recomiendo que eches un vistazo a la documentación de Varnish, ya que es el core de todo el sistema, y podrías sacarle incluso más partido. El archivo se encuentra en:

/etc/varnish/default.vcl

Finalmente también necesitarás un tercer archivo, normalmente ubicado en:

/etc/varnish/secret

Instalar Turpentine en Magento

Turpentine es la extensión mas conocida para facilitar la gestión de Varnish desde tu administrador de Magento.

Resumiendo bastante, lo que permite Turpentine es generar un archivo VCL y enviarlo a Varnish como archivo de configuración, de forma que no tengas que aprender los entresijos del lenguaje VCL.

Además, Turpentine te facilita también la utilización de bloques ESI, evitar que ciertas páginas de tu tienda se almacenen en la caché, invalidar datos de la caché cuando se modifican productos, categorías, etc. y unas cuantas cosas más que te facilitarán mucho la vida.

Para instalar Turpentine en tu Magento, puedes hacerlo como con cualquier otra extensión de Magento, vía Magento Connect, FTP o por el medio que prefieras. Al igual que ocurría al instalar Varnish en tu servidor, Turpentine se instala en tu tienda, pero permanecerá inicialmente desactivado.

Modifica los parámetros de inicio de Varnish

Cuando se inicia el daemon de Varnish desde la línea de comandos, deben indicarse una serie de parámetros como el tipo y la cantidad de memoria que deseamos que Varnish pueda utilizar en nuestro sistema, puertos de escucha del proceso, etc.

Todos esos parámetros se recogen en el archivo /etc/default/varnish, en el que deberás realizar algunos cambios.

Edita el archivo y modifica el puerto de escucha, pasando a configurar el puerto 80. Añade también los siguientes parámetros a la línea de inicio de Varnish (DAEMON_OPTS). Estos nuevos parámetros permiten el trabajo con bloques ESI y la modificación de la configuración de Varnish desde el administrador de Magento con Turpentine:

-u varnish -g varnish
-p esi_syntax=0x2
-p cli_buffer=16384
-p pipe_timeout=300

Modifica el fichero default.vcl de configuración de Varnish

Cuando el proceso varnish se inicia, el «programa» que ejecuta existente en el archivo /etc/varnish/default.vcl.

En este archivo se definen entre otras informaciones, los backends disponibles y cómo se debe procesar cada petición (qué se cachea, qué no se cachea, cuando se invalida la caché, etc.)

Para que varnish comience a funcionar, al menos deberás cambiar dos líneas para definir la dirección IP de tu servidor y el puerto de escucha de Apache. El resto de parámetros y funciones los modificaremos desde el administrador de Magento en el futuro, así que no es necesario que te preocupes demasiado de ellos, aunque te sugiero echar un vistazo ya que te dará una idea muy buena de cómo funciona Varnish internamente.

Encuentra y configura los siguientes datos en el archivo:

backend default {
    .host = "<tu dirección IP>";
    .port = "<puerto de escucha de Apache (8085 si vas a seguir el tutorial)";
}

Cambia el puerto de escucha de Apache

Como decíamos anteriormente, a partir de ahora todas las peticiones HTTP serán recibidas por Varnish, así que Apache deberá pasar a otro puerto (por ejemplo el 8085).

Modificar el puerto de escucha de Apache dependerá de la configuración de tu servidor (distribución, si utilizas algún panel tipo cpanel o plesk, etc.). Busca el tutorial adecuado en google para tu configuración ya que es diferente en cada caso.

Si utilizas Debian y tienes Plesk 12+ estás de suerte, y te indicamos los pasos al final del artículo ;)  Si utilizas Debian sin Plesk, también estás de enhorabuena y el proceso es incluso más sencillo. Edita el archivo /etc/apache2/ports.conf y cambiar las siguientes líneas para que queden como a continuación:

NameVirtualHost *:8085
Listen
 8085

Edita también el archivo /etc/apache2/sites-enabled/000-default y modifica la siguiente línea:

<VirtualHost *:8085>

<h2>Reinicia los servicios. Primera comprobación.</h2>

Una vez modificados los puertos, reinicia ambos servicios:

/etc/init.d/apache2 restart
/etc/init.d/varnish restart

Si todo ha ido bien, deberías poder acceder a tu Magento normalmente, pero… Va igual de lento o más, verdad? Tranquilo, es normal.

Lo que está ocurriendo ahora mismo es que tus peticiones llegan a Varnish y éste las reenvía hacia tu servidor Apache, pero de momento no se cachea nada.

¿Por qué?, porque todas las peticiones que se realizan a Magento llevan una cookie, y por defecto, todo lo que lleva una cookie, no se cachea en Varnish. Y aquí es donde aparece la magia de la extensión Turpentine…

Configuración de Turpentine desde el backend de Magento

Entra en tu panel de gestión de Magento y ve a Sistema => Configuración => Varnish => Varnish Options.

Allí verás una opción Varnish Authentication Key. Copia en esa casilla el contenido del archivo /etc/varnish/secret.

Con este cambio podremos modificar la configuración de Varnish desde el administrador de nuestra tienda Magento, sin tener que editar manualmente el archivo /etc/varnish/default.vcl cada vez que queramos realizar cambios.

Al pulsar guardar deberías ver un mensaje como este:

Comunicación Turpentine - Varnish

 

El mensaje significa que desde tu panel de Magento es posible modificar la configuración de Varnish, o más concretamente que el código VCL que ejecuta Varnish puede modificarse desde el panel de gestión de Magento (es justo lo que acaba de ocurrir).

A continuación ve a Sistema => Configuración => Varnish => Caching Options. Allí tendremos que modificar también algunos parámetros:

  • Backend host. Escribe la dirección IP de tu servidor (Apache)
  • Backend port. Escribe el puerto donde escucha tu servidor Apache.
  • URL Blacklist. Escriba las URLs de las páginas que quieres que excluir de la caché.

El resto de parámetros puedes dejarlos como están por defecto. Los explicaremos en detalle en otro artículo. Guarda la configuración y verifica que aparece el mismo mensaje de éxito que anteriormente.

Finalmente, ve a Sistema => Gestor de la caché y activa la caché de página y de bloque.

Activar caché Varnish en Magento

Bola extra: Si tienes Plesk 12+

Si tienes Plesk 12+ en tu servidor, probablemente a estas alturas te habrás dado cuenta de que Apache, en tu servidor no escucha en el puerto 80, sino en el 7080… ¿what?.

Sí, exacto, en la versión de Plesk 12 o posteriores, viene instalado por defecto Nginx, que es otro sistema de proxy inverso (hablaremos de las diferencias entre Varnish y Nginx en otro artículo).  Si este es tu caso, el cambio de puertos de Apache indicado más arriba es un poco más complicado en tu caso, pero el objetivo es el mismo al final (Varnish en el puerto 80 y Apache en otro puerto diferente).

En este caso lo primero que te recomendamos es desactivar Nginx desde tu Plesk, accediendo a Tools & Settings => Manage Services y desactivando el servicio Nginx Reverse Proxy.

Al hacerlo, el puerto de escucha de Apache se habrá modificado, pasando a ser el puerto 80. Y nuevamente deberás cambiarlo para dejar este puerto libre para Varnish. Puedes hacerlo mediante los siguientes comandos:

cd /usr/local/psa/admin/conf/templates
cp -a default custom
cd custom
find . -type f | xargs sed -r -i~ 's/\{?\$VAR->server->webserver->httpPort\}?/8085/g'
/usr/local/psa/admin/sbin/httpdmng --reconfigure-all

Además deberás modificar los archivos habituales, igual que comentábamos más arriba.

/etc/apache2/ports.conf
/etc/apache2/sites-enabled/000-default



One Comment

Hey! Qué opinas sobre el artículo?