清漆缓存-默认TTL?


23

我发现可以在VCL文件中按如下所示在Varnish中设置TTL:

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

但是默认设置是什么(假设后端服务器未设置任何缓存控制标头)?


看来我找到了答案:120秒-这是默认的VCL逻辑。
阿德(Ade)

Answers:


24

这在默认模板中:

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

所以120秒


您在哪里找到默认模板?
尼尔


有一个default.vcl至少从3.0.3起附带清漆,其中注释了所有默认配置子例程。可以在此处看到4.0默认配置:github.com/mattiasgeniar/varnish-4.0-configuration-templates/…–
th3morg

2
这与我的观察结果不符。的确,默认ttl是120秒,但是此数字的来源不能是该摘要。如果是这样,没有ttl的对象将被标记为hit_for_pass,但实际上它们会在缓存中保留120秒。
Kritzefitz

您会在这里找到内建VCL的来源- github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/...。使用varnish-<version>标记查看您的Varnish版本的版本。
丹尼·托马斯

34

默认TTL可以通过命令-t行开关通过varnishd命令传递,并且可能来自文件系统上的属性文件。在CentOS系统上,我正在使用DEFAULT_TTLfrom进行设置/etc/sysconfig/varnish

您可以像这样使用varnishadm查看实时设置,

varnishadm param.show default_ttl

实际上,以下默认VCL逻辑与不可缓存的对象有关。

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

表示“如果对象不可缓存-将此对象的客户端请求直接并同时传递给后端2分钟,请勿将其排队”

/programming/12691489/varnish-hit-for-pass-means上了解更多信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.