2012-06-20 16 views
11

Ich möchte Elemente meines Lacks mit HTTP löschen. Dieser http-Aufruf wird von einem Backend-Server hinter dem Lack selbst ausgelöst, so dass der Backend-Server keinen anderen Zugriff als HTTP hat.Lackreinigung mit HTTP und REGEX

Ich habe die folgenden Reinigungs Regeln mit den entsprechenden ACL implementiert, die

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

für

gut funktionieren, aber ich möchte in die Lage, eine URL über HTTP mit Regex

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

So kann mich spülen Ich möchte alle skalierten Versionen dieses Bildes löschen, sobald ein neues hochgeladen wurde. Gibt es einen Weg?

Antwort

9

try this:

wenn Lack 3.0 oder höher.

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

Sicher gibt es.

In VCL möchten Sie die Ban-Methode verwenden - dokumentiert in "man vcl". Es erstellt einen Filter für eingehende Anfragen. Wenn Sie dies mit einer Rate von mehr als 2 Mal pro Sekunde verwenden, empfehle ich Ihnen google "ban luker friendly" und schreiben Sie die Ausdrücke entsprechend um.

Ungeprüfte Code:

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

Zum einen eine weiße Liste von definieren, der die Spülung verwenden können, dann die purger Strophe in Ihrer VCL hinzuzufügen.

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 den Wert des Headers X-Purge-Regex verwenden, um ein Verbot zu erstellen.

So können Sie Dinge wie diese verbieten:

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

oder

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

varnishserver ist die Adresse des Lacks Server.

+0

Irgendwelche Hilfe hier? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –