2012-06-20 15 views
11

Vernitimin Elementlerini HTTP kullanarak temizlemek istiyorum. Bu http çağrısı, verniğin arkasındaki bir arka uç sunucusundan tetiklenir, böylece arka uç sunucusunun başka bir erişimi yoktur, ancak HTTP'dir.HTTP ve REGEX kullanarak vernik temizliği

Ben

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

için iyi çalışır göre ACL ile aşağıdaki tasfiye kuralları uygulayan ama

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

Bu şekilde ben Regex

kullanarak HTTP üzerinden bir URL temizlemek için mümkün istiyorum Yeni bir kez yüklendikten sonra bu görüntünün tüm ölçeklendirilmiş sürümlerini temizlemek istiyorum. Bir yolu var mı?

cevap

9

bu deneyin:

3.0 vernik ve eğer yukarı.

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

    } 
0

Elbette var.

VCL'de "man vcl" belgesinde belgelenen yasaklama yöntemini kullanmak istersiniz. Gelen isteklerde bir filtre oluşturur. Bunu, saniyede 2 kereden daha fazla bir oranda kullanacaksanız, google'ı "yasaklama dostu" olarak kullanmanızı ve ifadeleri buna göre yeniden yazmanızı öneririz.

Untested kodu:

sub vcl_recv { 
     if (req.method == "PURGERE" and client.ip ~ admin_network) { 
      ban("req.http.host == " + req.http.host + " && req.url == " + req.url); 
     } 
0
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"; 
    } 
} 
4

Öncelikle tasfiye kullanabilirsiniz kim bir beyaz liste tanımlamak, sonra VCL purger dörtlük ekleyin.

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

Vernik ban oluşturmak için başlığının X-Purge-Regex değerini kullanır.

Öyleyse bu gibi şeyler yasaklayabilir:

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

veya

curl -v -X PURGE -H 'X-Purge-Regex: ^/images/*' varnishserver:6081 

varnishserver senin vernik sunucusunun adresidir.

+0

Burada herhangi bir yardım var mı? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –