Qu’est-ce que Varnish ?
Varnish est un reverse proxy HTTP ultra-rapide, conçu pour mettre en cache les réponses de votre site web.
Il se place entre le navigateur du visiteur et le backend (nginx, Apache…) pour servir les pages déjà générées sans avoir à exécuter PHP ou interroger MySQL à chaque requête.
📍 Schéma simplifié d’un flux HTTP avec Varnish :
- Le navigateur envoie une requête (souvent HTTPS)
- Le serveur (ex. : nginx en port 443) déchiffre la requête SSL
- Il transmet la requête à Varnish en HTTP (port 80)
- Si Varnish a la page en cache : il la renvoie directement (hit)
- Sinon (miss) : il interroge le backend (nginx ou Apache en 8080), qui appelle PHP-FPM (port 9000 ou socket)
⚠️ Varnish ne gère pas le SSL. Il est donc protégé par un serveur HTTPS (souvent nginx ou Traefik).
Configuration de Varnish avec Magento 2
Magento propose une intégration native avec Varnish pour le Full Page Cache (FPC).
📦 Étapes de base :
- Allez dans le BO Magento :
Stores > Configuration > Advanced > System > Full Page Cache - Sélectionnez Varnish comme système de cache
- Cliquez sur « Export VCL » pour télécharger le fichier de configuration adapté à votre version
👉 Ce fichier VCL est la base de la configuration de Varnish.
🔧 Comprendre la configuration VCL
Le fichier .vcl
contient la logique métier de Varnish :
- gestion du cache
- règles de purge
- définition des backends
- TTL, cookies, headers, etc.
👉 Documentation officielle pour configurer Varnish :
https://varnish-cache.org/docs/
Dans le fichier VCL généré par Magento, les points clés sont :
🔹 Définition du backend
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Ici, Varnish sait à qui parler quand il n’a pas la page en cache.
🔹 ACL de Purge
acl purge {
"127.0.0.1";
"localhost";
"IP publique du serveur";
"IP du backend";
}
Seules ces IP pourront demander la purge du cache.
⚙️ Paramétrage côté Magento
env.php
: configuration des hôtes Varnish à purger
Magento garde la liste des serveurs Varnish à notifier en cas de purge dans :
'http_cache_hosts' => [
[
'host' => 'varnish',
'port' => '6081'
]
]
Le port 6081
est celui utilisé par défaut pour la purge (pas pour le trafic web).
💡 Cas particulier : si vous utilisez Traefik
Si vous avez Traefik en frontal, inutile de faire transiter les requêtes HTTP vers nginx.
➡️ Configurez Traefik pour interroger directement Varnish, qui jouera son rôle de proxy.
Cela évite un hop inutile et accélère le temps de réponse.
🏎️ Pourquoi Varnish est plus rapide que le FPC natif Magento ?
Magento propose le FPC avec stockage :
- en fichiers (par défaut)
- ou dans Redis
Mais dans ces deux cas, le moteur Magento est sollicité pour aller chercher le cache.
Avec Varnish, le cache est totalement en amont : aucune exécution PHP ni accès à la base de données.
Résultat :
- pages servies en quelques millisecondes
- back-end soulagé
- plus de ressources disponibles pour les vraies actions business (comme… vendre)
🎯 Ce qu’on ne cache pas avec Varnish
Varnish ne doit pas servir les images ni les fichiers statiques (JS/CSS).
Pourquoi ?
➡️ Les médias dans Magento peuvent représenter :
- des centaines de fichiers statiques (versionnés, digest, etc.)
- des variations produit (thumbnails, zooms, etc.)
- des assets volumineux
📌 Pour cela, on utilisera un CDN (type Cloudflare) avec des règles de cache spécifiques (cache rules) côté proxy.
🧩 Et les cas dynamiques dans Magento ?
Le FPC, c’est génial… sauf quand le contenu est personnalisé :
- prix spécifique par client
- contenus liés au panier ou à l’utilisateur connecté
Deux solutions courantes :
- Requêtes AJAX pour charger dynamiquement les blocs concernés
- LocalStorage : quand les données sont récupérables côté client
Le choix dépend des besoins métiers, UX et sécurité.
👉 On y reviendra dans un prochain article dédié.