有查询参数时如何显示原始页面缓存?

时间:2018-10-15 22:37:27

标签: varnish varnish-vcl

我认为我解决了第一部分,即不应使用

缓存具有查询参数的页面
if ( bereq.url ~ "/\?.*$" ){
    set beresp.uncacheable = true;
    set beresp.ttl = 120s;
    return (deliver);
  }

但是,当访问带有查询的页面时,该页面不会显示原始页面的缓存版本。

任何建议都值得赞赏。谢谢。

应该在varnish-vcl配置中添加什么才能使其实现?

1 个答案:

答案 0 :(得分:0)

对不起,我不确定您需要什么。您的代码实际上是利用清漆的命中方法,但您最好这样做:

return (pass)

与您的版本的细微差别,Varnish创建了一个缓存对象(实际上只是元数据),持续了120秒,以记住它不应该被缓存。但是从一开始就知道您不应该缓存它,您只能在vcl_recvsub vcl_recv { set req.url = reqsub(req.url, "\?.*", ""); }

现在,如果要剥离查询字符串,以便所有请求实际上返回主页,则必须执行以下操作:

this.$parent

这找到第一个问号及其所有内容,然后将其替换为空,从而有效地杀死了查询字符串。