所以我第一次使用清漆。我花了很长时间阅读它是如何工作的,但我无法弄清楚如何有选择地清除缓存。
就像说我有这样的网址
/?account=123&url=google.com
和另一个像
/?account=123&url=stackoverflow.com
我需要清除缓存account=123
。
我只能弄清楚发布清除
?/帐户= 123&安培; URL = stackoverflow.com
只会使用PURGE方法清除网址与传入网址匹配的缓存。
感谢任何帮助。
答案 0 :(得分:4)
所以这才有效。在清漆3中,选择性吹扫称为禁令。所以你需要使用
ban("obj.http.x-url ~ " + req.url);
答案 1 :(得分:3)
我们遇到了类似的问题,并最终使用单独的X-Purge-Regex-URL请求标头来使用HTTP请求清除内容。
以下是我们用来实现此目的的VCL:
acl purge {
"localhost";
"10.1.1.0"/28;
}
sub vcl_recv {
if (req.http.X-Purge-Regex-URL) {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
ban_url(req.url);
error 200 "Banned URL";
}
}
在您的情况下,我们可以使用curl -H "X-Purge-Regex-URL: True" --head "http://my.host.addr/?account=123"
请注意ban_url()
不关心HTTP主机。它清除所有主机的所有匹配URL。如果这不是你想要的,你应该使用ban()
来禁止使用req.http.host
和req.url
。
答案 2 :(得分:1)
HTTP PURGE方法允许您清除特定网址。
要使用regexp进行清除,您必须使用telnet连接到varnish管理端口或使用命令行工具varnishadm。
通常你可以通过
这样做telnet localhost 6082
使用telnet,连接到varnish服务器后,可以使用purge命令进行清除:
purge req.url ~ /?account=123
上面的将清除匹配“/?account = 123”
的每个网址如果要像使用HTTP PURGE请求一样清除特定页面,则必须使用双等号而不是波浪号(〜)
purge req.url == /?account=123
你也可以用
清除整个域名purge req.http.host == yourdomain.com
或您网域上的特定网页:
purge req.http.host == yourdomain.com && req.url ~ /?account=123
答案 3 :(得分:0)
我不是Varnish专家,但这对我有用:
acl purge {
"localhost";
"10.1.1.0";
}
sub vcl_recv {
if (req.http.X-Purge-Regex-URL) {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
ban_url(req.url);
#error 200 "Banned URL";
}
}
请注意,我评论了error 200 "Banner URL"
- 在我的情况下导致问题。