Varnish Cache
Guía de Varnish Cache en CloudPanel v2
Introducción
Varnish Cache es un proxy inverso HTTP de caché que acelera los sitios web hasta 100-250 veces más rápido. Almacena una copia de la página en memoria después de la primera visita. Está integrado en CloudPanel como una solución llave en mano: solo actívalo y tus sitios cargarán más rápido.
¿Qué es Varnish Cache?
Varnish Cache es un proxy inverso HTTP de caché.
Beneficios
- Cargas de páginas ultrarrápidas: Hasta 250 veces más rápido.
- Ahorro de hasta 80% en infraestructura.
- Mejora en la experiencia del usuario.
- Mejor posicionamiento en buscadores.
Aplicaciones Soportadas
Las siguientes aplicaciones PHP tienen soporte para Varnish Cache:
- WordPress
- WooCommerce
- CodeIgniter
- Laravel
- Symfony
- Genéricas
- Slim
Configuraciones (Settings)
Varnish Cache está integrado en CloudPanel como una solución llave en mano. Actívalo para lograr cargas de páginas hasta 250 veces más rápidas. Configura el Tiempo de Vida de la Caché, Parámetros Excluidos y Exclusiones según sea necesario.
Prefijo de Etiquetas de Caché (Cache Tag Prefix)
- Es la etiqueta principal de caché usada en cada página.
- Otras etiquetas de caché usan este prefijo al frente.
Parámetros Excluidos (Excluded Params)
- Lista de parámetros GET que desactivan la caché.
- Ejemplos de URLs no cacheadas:
https://www.domain.com/?noCache=1https://www.domain.com/?page=1&__SID=e71d59d553fc2d8faa774627c48a02ba
Exclusiones (Excludes)
Nota: Purga la URL/archivo de la caché después de añadirlo a las Exclusiones.
- Configura archivos o rutas que no deben cachearse.
- Ejemplos de exclusiones:
^/my-account/→ URLs que empiezan con/my-account/no se cachean./cart/→ URLs que contienen/cart/no se cachean.
Purgar Caché (Purge Cache)
-
Purgar Caché Completa: Elimina toda la caché del sitio de Varnish Cache.
-
Bajo el capó, envía una solicitud PURGE con el encabezado
X-Cache-Tagsal puerto 6081 (Varnish Cache). -
Ejemplo de comando CLI:
curl -v -X PURGE -H 'X-Cache-Tags: aac6' 127.0.0.1:6081 -
Purga de forma más específica introduciendo una URL única o etiquetas separadas por comas.
Gestión del Servicio (Service)
Configuraciones del Servicio
- Asignación de memoria por defecto: 512 MB.
- Aumenta la memoria si gestionas múltiples sitios o sitios con muchas páginas.
Aumentar la Asignación de Memoria
-
Edita el archivo de servicio systemd:
nano /lib/systemd/system/varnish.service -
Modifica el valor
mallocen la líneaExecStart(ej. de 512m a 2048m):ExecStart=/usr/sbin/varnishd \ -a :6081 \ -f /etc/varnish/default.vcl \ -P %t/%N/varnishd.pid \ -p feature=+http2 \ -p http_resp_hdr_len=40000 \ -s malloc,512m -
Recarga la configuración de systemd:
systemctl daemon-reload -
Reinicia el servicio de Varnish Cache:
systemctl restart varnish
Archivo de Configuración
- Ubicación:
/etc/varnish/default.vcl
Recargar Configuración
Después de cambios, recarga la configuración:
varnishreload
Comandos de Gestión
- Reiniciar servicio:
systemctl restart varnish - Recargar configuración:
varnishreload
Guía para Desarrolladores
Integración con VHost (VHost Integration)
Conceptos Básicos
- Varnish Cache es un proxy inverso HTTP de caché que acelera sitios almacenando la Fuente de la Página Comprimida en memoria.
- Archivos estáticos como CSS, JS e Imágenes NO se cachean en Varnish; se entregan más rápido por NGINX.
- Al acceder a un sitio (ej.
https://www.domain.com):- La solicitud es recibida por NGINX, donde se termina SSL/TLS.
- Si es un archivo estático (hoja de estilos, JavaScript, imagen), NGINX lo entrega inmediatamente.
- Todas las demás solicitudes se forwarding a Varnish Cache en el Puerto 6081.
- Si Varnish tiene una entrada cacheada:
- La fuente de la página se devuelve inmediatamente de la memoria sin involucrar PHP-FPM.
- Si no hay entrada cacheada:
- Varnish forwarding la solicitud a NGINX en el Puerto 8080.
- NGINX procesa la solicitud vía la Aplicación PHP usando PHP-FPM.
Explicación de la Configuración VHost
La siguiente configuración VHost se usa para sitios WordPress/WooCommerce.
Reglas de Redirección (Líneas 1–14)
- Todas las solicitudes a
domain.com(tanto HTTP como HTTPS) se redirigen vía 301 ahttps://www.domain.com.
Manejo de Archivos Estáticos (Líneas 84–92)
- Archivos estáticos como CSS, JS e Imágenes se entregan directamente por NGINX.
Manejo de Solicitudes Dinámicas (Líneas 66–82)
- Todas las demás solicitudes se procesan bajo el bloque
location /. - En la línea 67, se usa el marcador de posición
{{varnish_proxy_pass}}:- Cuando Varnish Cache está desactivado, resuelve a:
proxy_pass http://127.0.0.1:8080; - Cuando Varnish Cache está activado, usa la configuración del Servidor Varnish, ej.:
proxy_pass http://127.0.0.1:6081;
- Cuando Varnish Cache está desactivado, resuelve a:
Reglas de Bypass Específicas para WordPress (Líneas 48–64)
- Solicitudes a
/wp-admin/se bypassean y NO se envían a Varnish Cache. - Estas solicitudes se forwarding directamente al Puerto 8080 (ver líneas 99–134).
- Se procesan por la Aplicación PHP vía PHP-FPM.
Controlador PHP (PHP Controller)
Cachear sitios dinámicos como WordPress, WooCommerce u otras Aplicaciones PHP es desafiante. La mayoría de páginas se pueden cachear, pero páginas específicas de usuario como carritos, checkouts o áreas de cliente deben excluirse.
El comportamiento de caché —como el tiempo de vida máximo o rutas a excluir— se controla vía un Controlador PHP, añadido automáticamente cuando se habilita Varnish Cache en las configuraciones.
El Archivo del Controlador
El Controlador PHP es un archivo PHP preprendido a la aplicación usando auto_prepend_file.
Cuando Varnish Cache está habilitado, el controlador se añade vía la configuración NGINX VHOST:
auto_prepend_file=/home/siteUser/.varnish-cache/controller.php;
Para aplicaciones soportadas (WordPress/WooCommerce, Laravel, Symfony, etc.), el controlador apropiado está disponible en el repositorio de GitHub.
Al crear un sitio para una aplicación soportada, el controlador correcto se coloca automáticamente en:
/home/$siteUser/.varnish-cache/controller.php
Este archivo se ejecuta primero debido a auto_prepend_file.
Encabezados de Control de Caché
Varnish Cache usa encabezados Cache-Control para gestionar la caché. Ejemplo para cachear una página por 604800 segundos (1 semana):
Cache-Control: public, max-age=604800, s-maxage=604800
El controlador determina la cacheabilidad y establece estos encabezados:
- X-Cache-Lifetime
- X-Cache-Tags
- Cache-Control
Encabezados de respuesta incluyen:
x-cache-age: Edad de la página en Varnish Cache (en segundos)x-cache-lifetime: Tiempo hasta expiraciónx-cache-tags: Etiquetas asociadas al contenido cacheado
El controlador verifica si una página se puede cachear y enriquece X-Cache-Tags para operaciones de purga.
Mecanismos Clave
header_register_callback
En la línea 321, se registra un callback usando:
header_register_callback($headerRegisterCallback);
Esto se activa cuando PHP empieza a enviar salida. Añade etiquetas de caché adicionales requeridas para operaciones de purga.
register_shutdown_function
Se registra un callback de shutdown para manejar operaciones de purga:
register_shutdown_function($registerShutdownCallback);
Este callback ejecuta acciones de purga cuando ocurren eventos específicos (ej. editar un post en el área admin), invalidando páginas con etiquetas de caché coincidentes.
Aplicaciones Personalizadas
Para aplicaciones PHP personalizadas (ej. Laravel, Symfony), puedes controlar la caché manualmente.
Establecer Tiempo de Vida de Caché
Para cachear una página por un duración específica (ej. 10 minutos = 600 segundos):
ClpVarnish::setCacheLifetime(600);
Añadir Etiquetas de Caché
Para enriquecer etiquetas de caché (ej. para caché específica de producto), usa el prefijo y añade etiquetas:
$cacheTagPrefix = ClpVarnish::getCacheTagPrefix();
$cacheTag = sprintf('%s-%s', $cacheTagPrefix, 'my-cache-tag');
ClpVarnish::addCacheTag($cacheTag);
Asegúrate de que la etiqueta de caché use el prefijo correcto.
Modo Desarrollador
Habilita el registro de solicitudes de purga para depuración.
Habilitar Modo Desarrollador
-
Abre el archivo del controlador:
nano ~/.varnish-cache/controller.php -
Establece la constante:
define('VARNISH_DEVELOPER_MODE', true); -
Monitorea los logs de purga:
tail -f ~/logs/varnish-cache/purge.log -n1000
Los eventos de purga se registran en:
/home/$siteUser/logs/varnish-cache/purge.log