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

How to display the original page cache when there is a query parameter?

我想我解决了第一部分,它不应该使用

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

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

如有任何建议,我们将不胜感激。谢谢

应该在 varnish-vcl 配置中添加什么才能实现这一点?

抱歉,我不确定你需要什么。您的代码实际上利用了 varnish 的 hit-for-miss 功能,但您最好只这样做:

sub vcl_recv {
    if (req.url ~ \?) {
        return (pass);
    }
}

您的版本存在细微差别,Varnish 创建一个缓存对象(实际上只是元数据)120 秒以记住它不应该被缓存。但是你从一开始就知道你不应该缓存它,你可以 return (pass) in vcl_recv.

现在,如果您想要剥离查询字符串,以便所有请求实际上 return 主页,您必须改为这样做:

sub vcl_recv {
    set req.url = reqsub(req.url, "\?.*", "");
}

这会找到第一个问号及其正确的所有内容并将其替换为空,有效地杀死查询字符串。