Curl 使用HTTP和正则表达式进行清漆清除

Curl 使用HTTP和正则表达式进行清漆清除,curl,varnish,purge,Curl,Varnish,Purge,我想用HTTP清除清漆中的元素。此http调用是从varnish本身后面的后端服务器触发的,因此后端服务器除了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 这样,我想清

我想用HTTP清除清漆中的元素。此http调用是从varnish本身后面的后端服务器触发的,因此后端服务器除了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
这样,我想清除所有缩放版本的这张图片一旦一个新的已经上传。有办法吗?

当然有

在VCL中,您希望使用ban方法-记录在“man VCL”中。它在传入请求上创建一个过滤器。如果你打算以每秒2次以上的速度使用它,我建议你用谷歌搜索“ban luker friendly”,并相应地重写表达式

未测试代码:

sub vcl_recv {
         if (req.method == "PURGERE" and client.ip ~ admin_network) {
            ban("req.http.host == " + req.http.host + " && req.url == " + req.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中添加清除节

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.";
}
Varnish将使用标题
X-Purge-Regex
的值创建禁令

那么你可以禁止这样的事情:

curl -v -X PURGE -H 'X-Purge-Regex: ^/assets/*.css' varnishserver:6081


varnishserver
是您的varnish服务器的地址。

这里有帮助吗?:)如果您的正则表达式中有在url中编码的字符,请使用@Egidijus解决方案
curl -v -X PURGE -H 'X-Purge-Regex: ^/assets/*.css' varnishserver:6081
curl -v -X PURGE -H 'X-Purge-Regex: ^/images/*' varnishserver:6081