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 ! |
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 |
âââââââcurl -X PURGE -H "Host: exemple.com" https://exemple.com/chemin/ressource.jpg
âââââââban req.http.host == "exemple.com" && req.url ~ "/images/"
curl -I https://exemple.com/style.css
Regardez :
Avec Chrome/Edge : DevTools > Network > Disable cache peut simuler un premier visiteur.
â
Votre cache Varnish est maintenant sous contrôle !