Purge de vernis à L'aide de HTTP et REGEX

je veux purger des éléments de mon vernis en utilisant HTTP. Cet appel http est déclenché à partir d'un serveur d'arrière-plan derrière le vernis lui-même, de sorte que le serveur d'arrière-plan n'a pas d'autre accès que HTTP.

j'ai mis en œuvre les règles de purge suivantes avec L'ACL correspondant qui fonctionnent bien pour

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

mais je veux être capable de purger une URL via HTTP en utilisant Regex

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

de cette façon, je veux effacer toutes les échelles la version de cette image une fois qu'un nouveau a été téléchargé. Est-il possible?

13
demandé sur MatthiasLaug 2012-06-20 16:41:15

4 réponses

essayez ceci:

si vernis 3.0 et plus.

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

    }
10
répondu mk_ 2012-07-06 04:06:45

définissez D'abord une liste blanche de qui peut utiliser la purge, puis ajoutez la strophe de purger dans votre 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.";
}

Vernis va utiliser la valeur de l'en-tête X-Purge-Regex pour créer une interdiction.

donc vous pouvez interdire des choses comme ça:

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

ou

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

varnishserver est l'adresse de votre vernis serveur.

4
répondu Egidijus 2015-11-17 16:52:42

bien sûr qu'il y en a.

dans VCL vous voulez utiliser la méthode ban-documentée dans"man vcl". Il crée un filtre sur les demandes entrantes. Si vous allez utiliser ce à un taux de plus de 2 fois par seconde je vous recommande google "ban luker friendly" et réécrire les expressions en conséquence.

code non testé:

sub vcl_recv {
         if (req.method == "PURGERE" and client.ip ~ admin_network) {
            ban("req.http.host == " + req.http.host + " && req.url == " + req.url);
         }
0
répondu perbu 2012-06-25 11:56:42
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
répondu Jeffery Wang 2015-04-20 04:12:13