有查询参数时如何显示原始页面缓存?
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, "\?.*", "");
}
这会找到第一个问号及其正确的所有内容并将其替换为空,有效地杀死查询字符串。
我想我解决了第一部分,它不应该使用
缓存带有查询参数的页面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, "\?.*", "");
}
这会找到第一个问号及其正确的所有内容并将其替换为空,有效地杀死查询字符串。