Procédure
En esta documentación, vamos a explicarle paso a paso cómo obligar a Varnish y a los navegadores a conservar sus recursos en caché, incluso cuando estos envían solicitudes Pragma: no-cache o Cache-Control: no-cache.
Las ofertas de alojamiento compartido y cPanel/VPS gestionados de LWS se basan en la pila:
Navegador ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM
Cuando todo está correctamente configurado, Varnish puede entregar hasta 1000 veces más rápido que un acceso directo a PHP, al tiempo que alivia la CPU del servidor.
| Elemento | Impacto sobre la caché | Cómo influir en él |
| Método | Solo GET y HEAD son elegibles | Evitar los POST para las páginas públicas |
| Encabezados de respuesta Cache-Control, Expires, Pragma | Determinan la duración y el alcance | Ajustar vía .htaccess (ver §3) |
| Cookies / Set-Cookie | Una cookie presente = no hay caché por defecto | Eliminar o neutralizar las cookies innecesarias |
| Status HTTP | 200, 203, 301, 302, 404, 410 son almacenables en caché | Sin acción, ¡pero evitar los 500! |
Trucs et astuces Varnish ignora por defecto el Cache-Control: no-cache enviado por el navegador para los archivos estáticos, pero respeta la "revalidation logic" si el objeto ya está en caché.
Active el módulo mod_headers (es el caso por defecto en LWS) y luego coloque el siguiente snippet donde quiera:
Header set Cache-Control "public, max-age=3600, s-maxage=3600, stale-while-revalidate=60, stale-if-error=86400"
Header set Expires "Thu, 31 Dec 2037 23:55:55 GMT"
Colocar el mismo archivo .htaccess en la carpeta "/images/" aplica la regla únicamente a la carpeta "images".
Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
immutable : indica al navegador que no es necesaria ninguna revalidación mientras el objeto no haya expirado; ideal para los archivos versionados (style.483bf.css).
3.3. Caché corta para HTML
Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate"
Expira después de 5 min del lado del cliente y 10 min del lado de Varnish, y luego revalidación obligatoria.
| Caso real | Fragmento de .htaccess | ¿Por qué? |
| Landing page actualizada cada hora | max-age=600, s-maxage=1200 | Los visitantes tienen datos «casi en tiempo real» sin saturar PHP |
| CSS/JS versionados | max-age=31536000, immutable | Tráfico casi nulo en el servidor, carga instantánea |
| Imágenes de productos e-commerce | max-age=604800 | Reduce el TTFB, acelera el catálogo |
| Back-office / wp-admin | no-store, private | Evita poner datos sensibles en la caché compartida |
Desde su hosting (script PHP de su sitio, tarea Cron o terminal SSH), la purga de la caché Varnish no requiere ningún token:
curl -X PURGE https://exemple.com/chemin/ressource.jpg
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
curl -X FULLPURGE https://exemple.com
$ch = curl_init('https://exemple.com/chemin/page.html');
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => 'PURGE', CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20]);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200 : purga de caché ; 405 : purga rechazada
curl_close($ch);Un script completo, listo para una tarea Cron, se propone en la ayuda Acelerar la velocidad de su sitio con Fastest Cache. También puede vaciar la caché desde su panel, con el botón «Vaciar la caché» de Fastest Cache.
curl -I https://exemple.com/style.cssObserve:
Con Chrome/Edge: DevTools > Network > Disable cache puede simular a un primer visitante.
✅ ¡Su caché Varnish está ahora bajo control!
Hágala al equipo de LWS y a la comunidad. La respuesta se publica tras la moderación.