Page index.php Cache: public TTL: 10s Généré: 09:57:31
Varnish · Edge Side Includes

Une page, cinq durées de cache

Varnish met la page en cache 10 secondes, mais assemble à chaque requête les fragments <esi:include> qu'elle contient : chacun a sa propre durée de vie, publique ou par session. Rechargez la page, connectez-vous, et regardez quelles heures changent.

ESI

Fragments

Public Privé En cache Pas de cache
<esi:include src="/menu.php" /> Privé TTL 60s
Anonyme ce menu est partagé par tous les visiteurs anonymes Connexion
Généré à
<esi:include src="/time.php" /> Public Pas de cache
Heure serveur : 27/10/2026 09:57:31, recalculée à chaque requête
Généré à
/index.php Public TTL 10s

Contenu public de la page

Ce bloc n'est pas un fragment : il fait partie de la page elle-même, et suit donc son TTL.

Généré à
<esi:include src="/user.php" /> Privé Pas de cache
Pas de dernière connexion
Généré à
<esi:include src="/sidebar.php" /> Public TTL 20s

Widgets publics

Le même pour tout le monde, régénéré toutes les 20 secondes.

Généré à
Code

Sous le capot

PHP + VCL
php/index.php PHP
// Varnish doit interpréter les balises ESI
header('Surrogate-Control: abc=ESI/1.0');
// La page reste 10s en cache
header('X-Reverse-Proxy-TTL: 10');
?>
<esi:include src="/menu.php" />
<esi:include src="/time.php" />
<esi:include src="/user.php" />
<esi:include src="/sidebar.php" />
varnish/default.vcl VCL
sub vcl_backend_response {
    if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
        set beresp.do_esi = true;
    }
    if (beresp.http.X-Reverse-Proxy-TTL) {
        set beresp.ttl = std.duration(
            beresp.http.X-Reverse-Proxy-TTL + "s", 0s);
    }
}
# menu.php et user.php : une entrée par session
sub vcl_hash { hash_data(req.http.Cookie); }