问题:
我无法清除我的页面。经过很多次,我决定找出净化的工作原理并找到它!
正如您所看到的,我们使用了新动作 - 返回(清除)。这结束了vcl_recv的执行并跳转到vcl_hash。这就像我们处理常规请求一样。当vcl_hash调用return(lookup)时,varnish将清除该对象,然后调用vcl_purge。在这里,您可以选择在清除对象后添加您希望Varnish采取的任何特定操作。 docs
然后我明白我在hash_data中有cookie并且我无法清除特定的URL。
问题:
如何通过URI清除我的所有页面?我认为禁令制度无法帮助我。也许你建议我一件事?
答案 0 :(得分:1)
Purge方法仅适用于所请求的特定网址。使用Purge不能使用正则表达式。 例如:发出www.example.com/uri请求并调用Purge,只有整个URL的对象才会从缓存中删除。然后,如果要使用Purge,则必须在VCL上实现以下功能:
acl purge {
"localhost";
"192.168.55.0"/24;
}
sub vcl_recv {
...
# allow PURGE from localhost and 192.168.55...
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return(synth(405,"Not allowed."));
}
return (purge);
}
...
}
之后,您需要做的就是清除URL,就是使用Purge方法向您的Varnish发送请求,如下所示:
$ curl -X PURGE "www.example.com/desired/uri"
当您只想使用一个请求删除许多对象时,将使用禁令。这可以使用Purge中不可用的正则表达式来完成。为了使用它,你应该有一个类似于下面的代码,保持之前的acl:
sub vcl_recv {
...
if (req.method == "BAN") {
# Same ACL check as above:
if (!client.ip ~ purge) {
return(synth(403, "Not allowed."));
}
ban("req.http.host == " + req.http.host +
" && req.url ~ " + req.url);
# Throw a synthetic page so the
# request won't go to the backend.
return(synth(200, "Ban added"));
}
...
}
禁止对象类似于清除,但现在您可以发送正则表达式。以下示例显示如何禁止主机www.example.com中的所有png文件:
$ curl -X BAN "www.example.com/.png$"
所有信息均来自Varnish docs。
我希望这个答案可以帮助您了解禁令和清除的工作原理,并确定它们如何为您提供帮助。
如果遗漏了任何内容或者没有满足您的需求,请编辑您的问题,以便在您的怀疑中更清楚(tittle和可能导致混淆的问题之间存在分歧)并且我很乐意编辑答案。