2012-06-20 9 views
11

Desidero eliminare elementi della mia vernice utilizzando HTTP. Questa chiamata http viene attivata da un server back-end dietro la vernice stessa, quindi il server di back-end non ha altro accesso ma HTTP.Eliminazione della vernice tramite HTTP e REGEX

ho implementato le seguenti regole spurgo con il secondo ACL che funzionano bene per

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

ma voglio essere in grado di eliminare un URL tramite HTTP utilizzando Regex

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

In questo modo ho vuoi cancellare la versione ridimensionata di questa immagine una volta che è stata caricata una nuova. C'è un modo?

risposta

9

provare questo:

se vernice 3.0 e fino.

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

Certo che c'è.

In VCL si desidera utilizzare il metodo ban, documentato in "man vcl". Crea un filtro sulle richieste in arrivo. Se hai intenzione di usarlo al ritmo di oltre 2 volte al secondo, ti consiglio google "ban luker friendly" e riscrivi le espressioni di conseguenza.

codice non testato:

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

In primo luogo definire una whitelist di chi può usare l'epurazione, quindi aggiungere la strofa purger nel vostro 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 utilizzerà il valore dell'intestazione X-Purge-Regex per creare un divieto.

Così dunque voi possibile escludere cose come questa:

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

o

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

varnishserver è l'indirizzo del server vernice.

+0

Qualsiasi aiuto qui? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –

Problemi correlati