Lack Cache - Standard TTL?

23

Ich habe festgestellt, dass ich die TTL in Varnish wie folgt in meiner VCL-Datei einstellen kann:

sub vcl_fetch {
    # 1 minute
    set obj.ttl = 1m;
}

Aber wie lautet die Standardeinstellung (vorausgesetzt, der Back-End-Server setzt keinen Cache-Control-Header)?

Ade
quelle
Es sieht so aus, als hätte ich die Antwort gefunden: 120 Sekunden - das ist in der Standard-VCL-Logik.
Ade

Antworten:

24

Dies ist in der Standardvorlage:

sub vcl_fetch {
    if (beresp.ttl <= 0s ||
        beresp.http.Set-Cookie ||
        beresp.http.Vary == "*") {
                /*
                 * Mark as "Hit-For-Pass" for the next 2 minutes
                 */
                set beresp.ttl = 120 s;
                return (hit_for_pass);
    }
    return (deliver);
}

Also 120 Sekunden.

Bart De Vos
quelle
Wo haben Sie die Standardvorlage gefunden?
Neil
Es gibt eine default.vcl, die ab Version 3.0.3 mit lack ausgeliefert wird und in der alle Standardkonfigurations-Subroutinen auskommentiert sind. Die 4.0-Standardkonfiguration ist hier zu sehen: github.com/mattiasgeniar/varnish-4.0-configuration-templates/…
th3morg
2
Dies spiegelt meine Beobachtungen nicht wider. Es ist wahr, dass der Standardwert für ttl 120 Sekunden beträgt, aber die Quelle dieser Zahl kann nicht dieses Snippet sein. Wenn dies der Fall wäre, würden Objekte ohne ttl als hit_for_pass markiert, bleiben jedoch tatsächlich 120 Sekunden lang im Cache.
Kritzefitz
Die Quelle der eingebauten vcl finden Sie hier - github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/… . Verwenden Sie die varnish-<version>Tags, um die Version für Ihre Varnish-Version anzuzeigen.
Danny Thomas
34

Die Standard-TTL kann über den Befehl varnishd mit dem Befehl übergeben werden -t und stammt wahrscheinlich aus einer Eigenschaftendatei in Ihrem Dateisystem. Auf dem CentOS-System, das ich gerade betrachte, wird es mit DEFAULT_TTLvon eingestellt /etc/sysconfig/varnish.

Sie können die Live-Einstellung mit varnishadm so sehen,

varnishadm param.show default_ttl

Tatsächlich bezieht sich die folgende Standard-VCL-Logik auf nicht zwischengespeicherte Objekte.

  sub vcl_fetch {
      if (beresp.ttl <= 0s ||
          beresp.http.Set-Cookie ||
          beresp.http.Vary == "*") {
                  /*
                   * Mark as "Hit-For-Pass" for the next 2 minutes
                   */
                  set beresp.ttl = 120 s;
                  return (hit_for_pass);
      }
      return (deliver);
  }

bedeutet "Wenn das Objekt nicht zwischengespeichert werden kann - Client-Anforderungen für dieses Objekt direkt und gleichzeitig für 2 Minuten übergeben, diese nicht in die Warteschlange stellen".

Lesen Sie mehr unter /programming/12691489/varnish-hit-for-pass-means

Sergej Alikov
quelle