Tembolok Pernis - TTL default?

23

Saya telah menemukan bahwa saya dapat mengatur TTL di Varnish sebagai berikut di file VCL saya:

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

Tapi apa pengaturan default (dengan asumsi server backend tidak mengatur header kontrol cache)?

Ade
sumber
Sepertinya saya sudah menemukan jawabannya: 120 detik - ini dalam logika VCL default.
Ade

Jawaban:

24

Ini ada dalam templat default:

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);
}

Jadi, 120 detik.

Bart De Vos
sumber
Di mana Anda menemukan templat default?
Neil
Ada default.vcl yang dikirimkan dengan pernis setidaknya 3.0.3 yang memiliki semua subrutin konfigurasi default berkomentar di dalamnya. Konfigurasi default 4.0 dapat dilihat di sini: github.com/mattiasgeniar/varnish-4.0-configuration-templates/…
th3morg
2
Ini tidak mencerminkan pengamatan saya. Memang benar bahwa ttl default adalah 120 detik, tetapi sumber nomor ini tidak dapat potongan itu. Jika ya, objek tanpa ttl akan ditandai sebagai hit_for_pass, tetapi sebenarnya disimpan dalam cache selama 120 detik.
Kritzefitz
Anda akan menemukan sumber builtin vcl di sini - github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/… . Gunakan varnish-<version>tag untuk melihat versi untuk rilis Varnish Anda.
Danny Thomas
34

TTL default dapat dilewatkan melalui perintah varnishd melalui -tsaklar commandline dan mungkin bersumber dari file properti di sistem file Anda. Pada sistem CentOS saya melihat itu diatur menggunakan DEFAULT_TTLdari /etc/sysconfig/varnish.

Anda dapat melihat pengaturan langsung menggunakan varnishadm seperti itu,

varnishadm param.show default_ttl

Sebenarnya, mengikuti logika VCL default terkait dengan objek yang tidak dapat di-cache.

  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);
  }

berarti "jika objek tidak dapat di-cache - kirimkan permintaan klien untuk objek ini untuk di-backend secara langsung dan simultan selama 2 menit, jangan antri mereka"

Baca lebih lanjut di /programming/12691489/varnish-hit-for-pass-means

Sergej Alikov
sumber