使用HTTP和REGEX的清漆清除
问题描述:
我想使用HTTP清除我的清漆的元素。这个http调用是从varnish后面的后端服务器触发的,所以后端服务器除了HTTP外没有其他访问。使用HTTP和REGEX的清漆清除
我已经实现与根据ACL以下清除规则,为
curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg
做工精细,但我希望能够使用正则表达式
curl -X PURGE http://www.example.com/image/123/*.jpg
这样,我通过HTTP清除的URL想要在新图片上传后清除此图片的所有缩放版本。有没有办法?
答
试试这个:
如果清漆3.0及以上。
vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~purge){
error 405 "Not allowed";
}
ban("req.http.host == " +req.http.host+" && req.url ~ "+req.url);
error 200 "Ban added";
}
答
当然有。
在VCL中,您想使用禁用方法 - 记录在“man vcl”中。它会针对传入的请求创建过滤器。如果你打算以每秒超过2次的速度使用它,我建议你谷歌“禁止友好”,并相应地重写表达式。
未经测试的代码:
sub vcl_recv {
if (req.method == "PURGERE" and client.ip ~ admin_network) {
ban("req.http.host == " + req.http.host + " && req.url == " + req.url);
}
答
acl purge {
"127.0.0.1";
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "IP:" + client.ip + " Not allowed.";
}
ban("req.http.host == " + req.http.host + " && req.url ~ " + req.url);
error 200 "host:" + req.http.host + " url:" + req.url + " Ban added";
}
}
答
首先定义谁可以使用该清洗白名单,然后在您的VCL添加净化器节。
acl purge {
"127.0.0.1";
"10.22.0.0"/16;
}
sub vcl_recv {
if (req.http.X-Purge-Regex) {
if (!client.ip ~ purge) {
error 405 "Varnish says nope, not allowed.";
}
ban_url(req.http.X-Purge-Regex);
error 200 "The URL has been Banned.";
}
光油将使用标头X-Purge-Regex
的值来创建一个禁令。
,那么你可以禁止这样的事情:
curl -v -X PURGE -H 'X-Purge-Regex: ^/assets/*.css' varnishserver:6081
或
curl -v -X PURGE -H 'X-Purge-Regex: ^/images/*' varnishserver:6081
varnishserver
是您的清漆服务器的地址。
这里有什么帮助吗? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –