2 votes

Empêcher varnish de mettre en cache une page lorsque le backend définit explicitement Cache-Control : no-cache ?

Il arrive que certaines pages doivent éviter d'être mises en cache, et elles ont toutes l'en-tête de réponse suivant défini par le backend :

Cache-Control: no-cache, no-store, must-revalidate, max-age=0

Varnish, cependant, met volontiers ces pages en cache. Y a-t-il quelque chose que je puisse ajouter à la configuration pour empêcher cela ? Je suppose que c'est quelque chose qui devrait aller dans vcl_deliver o vcl_fetch sous-routines, mais la documentation n'est pas très utile (pour moi en tout cas).

En fait, je cherche quelque chose comme ceci mais à l'inverse - il faut vérifier les en-têtes de la réponse.

Varnish est la version 3.0 (non, je ne peux pas faire de mise à jour pour le moment).


Configuration pertinente :

sub vcl_fetch {
    if (req.http.X-Varnish-Use-Cache && beresp.status != 500) {
        set beresp.ttl = 24h;
        set beresp.do_esi = true;
        unset beresp.http.Set-Cookie;
    }

    return (deliver);
}

sub vcl_deliver {
    if(!resp.http.X-Cache) {
        if (obj.hits > 0) {
            set resp.http.X-Cache = "HIT";
        } else {
            set resp.http.X-Cache = "MISS";
        }
    } else {
        if (obj.hits > 0) {
            set resp.http.X-Cache = resp.http.X-Cache + ", HIT";
        } else {
            set resp.http.X-Cache = resp.http.X-Cache + ", MISS";
        }
    }
    set resp.http.X-Flavour = req.http.X-Flavour;
    return (deliver);
}

1voto

Joshua DeWald Points 306

Le vernis devrait honorer le Cache-Control en-tête.

La cause la plus probable est le return (deliver) dans votre vcl_fetch ce qui permet de contourner la gestion par défaut de Varnish, ce qui permet généralement d'appliquer l'option Cache-Control et marquer le contenu comme non cachable.

Donc je vous recommande d'enlever ça du bas de la page. vcl_fetch .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X