Procédure
Dans cette documentation, nous allons vous expliquer pas à pas comment obliger Varnish et les navigateurs à conserver vos ressources en cache, même quand ceux‑ci envoient des requêtes Pragma: no‑cache ou Cache‑Control: no-cache.
Les formules d’hébergement mutualisé et cPanel/VPS gérés de LWS reposent sur la pile :
Navigateur ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM
Lorsque tout est correctement configuré, Varnish peut livrer jusqu’à 1000 fois plus vite qu’un accès direct à PHP, tout en soulageant le CPU du serveur.
| Élément | Impact sur la cache | Comment l’influencer |
| Méthode | Seuls GET et HEAD sont éligibles | Éviter les POST pour les pages publiques |
| En‑têtes réponse Cache-Control, Expires, Pragma | Déterminent la durée et la portée | Régler via .htaccess (voir §3) |
| Cookies / Set-Cookie | Un cookie présent = pas de mise en cache par défaut | Supprimer ou neutraliser les cookies inutiles |
| Status HTTP | 200, 203, 301, 302, 404, 410 sont cachables | Pas d’action, mais éviter les 500 ! |
Trucs et astuces Varnish ignore par défaut le Cache-Control: no-cache envoyé par le navigateur pour les fichiers statiques, mais respecte le "revalidation logic" si l’objet est déjà en cache.
Activez le module mod_headers (c’est le cas par défaut chez LWS) puis placez le snippet suivant où vous voulez :
<IfModule mod_headers.c>
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"
</IfModule>Mettre le même fichier .htaccess dans le dossier "/images/" applique la règle uniquement au dossier "images".
<IfModule mod_headers.c>
<FilesMatch "\.(css|js|png|jpg|webp)$">
Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
</FilesMatch>
</IfModule>immutable : indique au navigateur qu’aucune revalidation n’est nécessaire tant que l’objet n’a pas expiré ; idéal pour les fichiers versionnés (style.483bf.css).
3.3. Cache court pour HTML
<FilesMatch "\.(html?|htm)$">
Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate"
</FilesMatch>Expire après 5 min côté client et 10 min côté Varnish, puis revalidation obligatoire.
| Cas réel | Fragment de .htaccess | Pourquoi ? |
| Landing page mise à jour toutes les heures | max-age=600, s-maxage=1200 | Les visiteurs ont une donnée « presque live » sans saturer PHP |
| CSS/JS versionnés | max-age=31536000, immutable | Trafic quasi nul sur le serveur, chargement instantané |
| Images produits e‑commerce | max-age=604800 | Réduit le TTFB, accélère le catalogue |
| Back‑office / wp-admin | no-store, private | Évite de mettre des données sensibles dans la cache partagée |
Depuis votre hébergement (script PHP de votre site, tâche Cron ou terminal SSH), la purge du cache Varnish ne demande aucun jeton :
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 : cache purge ; 405 : purge refusee
curl_close($ch);Un script complet, prêt pour une tâche Cron, est proposé dans l'aide Accélérer la vitesse de votre site avec Fastest Cache. Vous pouvez aussi purger le cache depuis votre panneau, avec le bouton « Purger le cache » de Fastest Cache.
curl -I https://exemple.com/style.cssRegardez :
Avec Chrome/Edge : DevTools > Network > Disable cache peut simuler un premier visiteur.
✅ Votre cache Varnish est maintenant sous contrôle !
Posez-la à l'équipe LWS et à la communauté. Réponse publiée après modération.