Advanced Varnish

Proporciona integración avanzada de caché Varnish para Drupal con soporte ESI, configuración de TTL por tipo de contenido y funciones completas de gestión de caché.

adv_varnish
1,570 sites
36
drupal.org

Instalar

Drupal 11, 10, 9 v4.0.13
composer require 'drupal/adv_varnish:^4.0'

Overview

Advanced Varnish es un módulo de caché integral que proporciona una profunda integración entre Drupal y los servidores de caché de proxy inverso Varnish. Permite un almacenamiento en caché eficiente de páginas tanto para usuarios anónimos como autenticados a través de la tecnología Edge Side Includes (ESI).

El módulo permite a los administradores configurar ajustes de caché granulares, incluyendo valores de TTL (Time To Live) por tipo de contenido, caché ESI por bloque con diferentes niveles de granularidad de caché (por página, por rol o por usuario), y mecanismos sofisticados de invalidación de caché. Incluye un purgador de caché integrado que puede invalidar la caché por etiquetas, URLs o vaciar completamente toda la caché de Varnish.

Una característica única es la funcionalidad de Deflate cache, que invalida gradualmente la caché a través de ejecuciones de cron para prevenir avalanchas de caché durante actualizaciones importantes de contenido. El módulo también proporciona un sistema de plugins para crear User Blocks personalizados que pueden cargarse vía ESI para usuarios autenticados, permitiendo contenido personalizado mientras se mantienen páginas cacheables.

Features

  • Integración completa de caché Varnish con endpoints de servidor configurables que soportan múltiples servidores Varnish
  • Soporte ESI (Edge Side Includes) para servir bloques dinámicos dentro de páginas cacheadas
  • Configuración de TTL por tipo de contenido permitiendo diferentes tiempos de vida de caché para diferentes tipos de contenido
  • Configuración ESI por bloque con tres niveles de granularidad de caché: Compartido (por página), Por Roles de Usuario o Por ID de Usuario
  • Purgador de caché integrado que soporta purga por etiqueta de caché, por patrón de URL o vaciado completo de la caché del sitio
  • Función Deflate cache para invalidación gradual de caché durante ejecuciones de cron para prevenir avalanchas de caché
  • Segmentación de caché basada en cookies para usuarios autenticados con segmentación de caché basada en roles
  • Sistema de plugins UserBlocks para crear bloques de contenido específico del usuario cargados vía ESI
  • Configuración de período de gracia para servir contenido obsoleto cuando el backend no está disponible
  • Reglas personalizadas de encabezado Cache-Control por patrón de ruta para usuarios anónimos y autenticados
  • Patrones de exclusión de URL para deshabilitar el caché en rutas o dominios específicos
  • Modo de depuración con registro detallado y encabezados de depuración de caché
  • Integración automática de invalidación de etiquetas de caché con el sistema de etiquetas de caché de Drupal
  • Soporte para prevenir la purga de caché durante el modo de mantenimiento de Drupal

Use Cases

Sitio de noticias de alto tráfico con contenido personalizado

Un sitio web de noticias recibe millones de visitas de página diariamente. Usando Advanced Varnish con soporte ESI, el sitio puede cachear el contenido principal del artículo mientras carga dinámicamente elementos específicos del usuario (como mensajes de bienvenida, historial de lectura o estado de suscripción) vía ESI. Esto proporciona cargas de página casi instantáneas mientras sigue ofreciendo personalización.

Sitio de comercio electrónico con carrito de compras

Un sitio de comercio electrónico necesita cachear páginas de productos pero mostrar el contador del carrito de compras para usuarios autenticados. Usando el sistema de plugins UserBlocks, se puede crear un plugin personalizado para inyectar el contador del carrito vía ESI. Las páginas de productos permanecen completamente cacheadas mientras la información del carrito se carga por separado por usuario.

Despliegue multisitio con tipos de contenido variados

Una instalación multisitio de Drupal tiene diferentes tipos de contenido con frecuencias de actualización variadas. Usando ajustes de TTL por tipo de contenido, los artículos de noticias pueden tener una caché de 15 minutos, mientras que las páginas de destino pueden cachearse por 24 horas. Esto optimiza las tasas de aciertos de caché mientras asegura actualizaciones de contenido oportunas.

Actualización gradual de caché durante migración de contenido

Al realizar una migración de contenido grande o actualización masiva, la función Deflate puede usarse para invalidar gradualmente la caché durante múltiples ejecuciones de cron. Esto previene una avalancha de caché donde todas las páginas repentinamente quedan sin cachear, causando sobrecarga del backend.

Entornos de desarrollo y staging

Usando el permiso 'bypass advanced varnish cache', los desarrolladores y editores de contenido pueden tener la capacidad de ver contenido sin cachear durante el desarrollo mientras los usuarios de producción continúan recibiendo páginas cacheadas. El modo de depuración también puede habilitarse para inspeccionar encabezados de caché.

Tips

  • Siempre pruebe su configuración VCL de Varnish en un entorno de staging antes de desplegar a producción.
  • Use el modo de Depuración durante el desarrollo para ver encabezados de caché (X-Adv-Varnish, X-Cache-Debug) en la respuesta.
  • La función Deflate es útil para actualizaciones importantes de contenido - invalida gradualmente la caché para prevenir sobrecarga del backend por avalanchas de caché.
  • Considere usar diferentes valores de TTL para diferentes tipos de contenido basándose en su frecuencia de actualización e importancia.
  • Los valores de 'Ruido de hash' y 'Secreto' se auto-generan pero pueden cambiarse. Cambiar el Ruido de hash invalidará todos los contenedores de caché de usuario.
  • Al crear plugins UserBlocks personalizados, recuerde incluir etiquetas de caché apropiadas para que el contenido se invalide cuando las entidades relevantes cambien.
  • El módulo soporta múltiples servidores Varnish - separe los hosts de servidores con espacios en la configuración.
  • Use el permiso 'bypass advanced varnish cache' con moderación, ya que los usuarios con este permiso siempre llegarán al backend de Drupal.

Technical Details

Admin Pages 3
Configuración de Advanced Varnish cache /admin/config/development/adv_varnish

Página principal de configuración del módulo Advanced Varnish donde puede configurar el comportamiento del caché, ajustes del servidor y varias opciones.

Limpiar caché de Varnish (Purga manual) /admin/config/development/adv_varnish/clear_cache

Purgar manualmente la caché de Varnish por etiqueta, URL o vaciar toda la caché del sitio. Solo disponible cuando el purgador de Varnish integrado está habilitado.

Deflate caché de Varnish /admin/config/development/adv_varnish/deflate

Invalidar gradualmente la caché de Varnish durante múltiples ejecuciones de cron para prevenir avalanchas de caché. Solo disponible cuando el purgador de Varnish integrado está habilitado.

Permisos 2
Omitir caché de Varnish

Varnish no se usará para roles de usuario con este permiso establecido. Esto podría afectar el rendimiento del usuario ya que la caché de Varnish será ignorada para tales usuarios.

Configurar ajustes de Advanced Varnish

Este permiso permite acceso a las páginas de configuración de Advanced Varnish cache. Permiso de acceso restringido.

Hooks 1
hook_adv_varnish_user_blocks_info_alter

Permite a los módulos alterar las definiciones de plugins UserBlocks.

Troubleshooting 5
La caché no se invalida cuando el contenido se actualiza

Asegúrese de que el purgador de Varnish integrado esté habilitado y el host del servidor Varnish esté correctamente configurado. Verifique que el VCL de Varnish esté configurado para aceptar solicitudes BAN con el encabezado X-Varnish-Purge coincidiendo con el secreto configurado. Habilite el registro en los ajustes del módulo y revise los logs de watchdog para detalles de solicitudes de purga.

Los bloques ESI se muestran como comentarios HTML en lugar de contenido

Verifique que su VCL de Varnish esté configurado para procesar ESI. El cliente debe enviar el encabezado 'Surrogate-Capability: abc=ESI/1.0', y Varnish debe estar configurado para manejar includes ESI. También asegúrese de que 'Habilitar soporte ESI de Varnish' esté marcado en los ajustes del módulo.

Los usuarios autenticados ven contenido cacheado de otros usuarios

Esto típicamente indica un problema de configuración del VCL. Asegúrese de que su VCL de Varnish varíe la caché por el encabezado X-Bin y maneje correctamente la cookie ADVBIN. El módulo usa segmentación de caché basada en roles, por lo que usuarios con los mismos roles deberían ver el mismo contenido cacheado.

La página redirige infinitamente para usuarios anónimos

Habilite 'Prevenir redirección si la cookie está vacía después de actualización' en los ajustes de Redirección. Esto previene bucles de redirección para clientes (como motores de búsqueda) que no soportan cookies.

Las solicitudes de purga de caché fallan durante el modo de mantenimiento

Si necesita que la caché se purgue durante el mantenimiento, desmarque 'Prevenir purga de Varnish durante el Modo de Mantenimiento' en la configuración General. De lo contrario, este es el comportamiento esperado para mantener las páginas cacheadas durante despliegues.

Security Notes 4
  • El permiso 'administer advanced varnish configuration' está marcado como acceso restringido y solo debe otorgarse a administradores de confianza.
  • El encabezado secreto de Varnish (X-Varnish-Purge) debe mantenerse seguro y su VCL de Varnish debe verificar este encabezado antes de aceptar solicitudes BAN.
  • El hash de cookies usa HMAC-SHA256 con tanto el ruido configurado como la sal de hash de Drupal para seguridad.
  • Asegúrese de que su VCL de Varnish valide correctamente el encabezado secreto para prevenir purgas de caché no autorizadas desde fuentes externas.