Purge 方法仅适用于正在请求的特定 url。不能对 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"
当您想通过一个请求删除多个对象时使用 Ban。这可以使用 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中检索的。
我希望这个答案可以帮助您了解禁令和清除是如何工作的,并且您可以确定它们如何为您提供帮助。
如果缺少任何内容或无法满足您的需求,请编辑您的问题以使您的疑问更加清晰(标题与可能导致混淆的问题之间存在分歧),我很乐意编辑答案。