使用HTTP和REGEX清漆吹扫(Varnish purge using HTTP and REGE

2019-07-30 00:50发布

我要清除使用HTTP我的清漆的元素。 该HTTP调用从清漆自身后面的后端服务器触发,所以后端服务器已经没有其他的访问,但HTTP。

我已经实现与根据ACL以下清除规则,对正常工作

curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg

但我希望能够使用正则表达式通过HTTP清除的URL

curl -X PURGE http://www.example.com/image/123/*.jpg

这样,我想清除此图像的所有缩放版本一旦新的已上载。 有没有办法?

Answer 1:

试试这个:

如果清漆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";

    }


Answer 2:

首先定义谁可以使用该清洗白名单,然后在您的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是您的清漆服务器的地址。



Answer 3:

当然有。

在VCL您要使用的禁令方法 - 在“男人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);
         }


Answer 4:

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";
    }
}


文章来源: Varnish purge using HTTP and REGEX