it-swarm.com.de

Lackreinigung mit HTTP und REGEX

Ich möchte Elemente meines Lackes mit HTTP entfernen. Dieser http-Aufruf wird von einem Backend-Server hinter dem Lack selbst ausgelöst, sodass der Backend-Server keinen anderen Zugriff hat, sondern HTTP. 

Ich habe die folgenden Reinigungsregeln mit der entsprechenden ACL implementiert, die gut funktionieren 

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

aber ich möchte in der Lage sein, eine URL über HTTP mit Regex zu löschen

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

Auf diese Weise möchte ich alle skalierten Versionen dieses Bildes löschen, sobald ein neues hochgeladen wurde. Gibt es einen Weg?

14
MatthiasLaug

versuche dies:

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

    }
11
mk_

Definieren Sie zunächst eine Whitelist, wer die Bereinigung verwenden kann, und fügen Sie dann die Bereinigungszeilengruppe in Ihre VCL ein.

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

Dann kannst du so etwas 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 Ihres Lackservers.

4
Egidijus
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";
    }
}
0
Jeffery Wang

Sicher gibt es das.

In VCL möchten Sie die Ban-Methode verwenden, die in "man vcl" dokumentiert ist. Es erstellt einen Filter für eingehende Anfragen. Wenn Sie dies mehr als zweimal pro Sekunde verwenden, empfehle ich Ihnen, google "ban luker friendly" zu verwenden und die Ausdrücke entsprechend umzuschreiben. 

Nicht getesteter 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
perbu