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
Instalar
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
/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.
/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.
/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
Hooks 1
hook_adv_varnish_user_blocks_info_alter
Permite a los módulos alterar las definiciones de plugins UserBlocks.
Troubleshooting 5
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.
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.
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.
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.
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.