清漆缓存 - 默认 TTL?

Ade*_*Ade 24 cache varnish ttl

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

sub vcl_fetch {
    # 1 minute
    set obj.ttl = 1m;
}
Run Code Online (Sandbox Code Playgroud)

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

小智 34

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

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

varnishadm param.show default_ttl
Run Code Online (Sandbox Code Playgroud)

实际上,遵循默认的 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);
  }
Run Code Online (Sandbox Code Playgroud)

意思是“如果对象不可缓存 - 将此对象的客户端请求直接并同时传递到后端 2 分钟,不要将它们排队”

阅读更多/sf/ask/888404261/


Bar*_*Vos 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);
}
Run Code Online (Sandbox Code Playgroud)

所以,120 秒。

  • 这并不反映我的观察。确实,默认的 ttl 是 120 秒,但这个数字的来源不能是那个片段。如果是这样,没有 ttl 的对象将被标记为 hit_for_pass,但它们实际上会在缓存中保留 120 秒。 (2认同)