Varnish 3 - 如何在http标头中设置最大年龄

时间:2012-10-12 17:29:07

标签: varnish varnish-vcl

我正在使用Varnish 3.0.3并通过在HTTP标头中为静态资源设置最大年龄来使用它来利用浏览器缓存。我尝试将以下配置添加到default.vcl:

sub vcl_fetch {
  if (beresp.cacheable) {
    /* Remove Expires from backend, it's not long enough */
    unset beresp.http.expires;

    /* Set the clients TTL on this object */
    set beresp.http.cache-control = "max-age=900";

    /* Set how long Varnish will keep it */
    set beresp.ttl = 1w;

    /* marker for vcl_deliver to reset Age: */
    set beresp.http.magicmarker = "1";
  }
}

sub vcl_deliver {
  if (resp.http.magicmarker) {
    /* Remove the magic marker */
    unset resp.http.magicmarker;

    /* By definition we have a fresh object */
    set resp.http.age = "0";
  }
}

这是从https://www.varnish-cache.org/trac/wiki/VCLExampleLongerCaching复制的。也许我刚写了一个错字。在重新启动Varnish时,它不再有效。

我有两个问题。这是为Varnish 3做正确的方法吗?如果是这样,我做错了什么?其次,有没有办法在重启之前测试Varnish配置文件? Apache与“/ sbin / service httpd configtest”的方式有关。在上线之前捕获错误。谢谢。

1 个答案:

答案 0 :(得分:2)

是的,一般来说,这是覆盖后端TTL的方法。 删除beresp.http.expires,设置beresp.http.cache-control,设置beresp.ttl。 beresp.cacheable是2. [01] -ism。 3.0中的相同测试是检查beresp.ttl> 0.

一个小技巧是将您的魔术标记存储在req.http上,然后在将对象交给客户端之前不必清理它。

关于测试配置文件,您可以使用“varnishd -C -f /etc/varnish/default.vcl”直接调用VCL编译器。如果您的VCL出现故障,则会收到错误消息,如果VCL有效,您将获得一些生成C代码的页面。