2012-06-20 15 views
11

Quiero purgar Elementos de mi barniz usando HTTP. Esta llamada http se desencadena desde un servidor backend detrás del barniz, por lo que el servidor de fondo no tiene otro acceso que HTTP.Purga de barniz mediante HTTP y REGEX

He implementado las siguientes reglas de purgar con la ACL de acuerdo que funcionan bien para

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

pero yo quiero ser capaz de purgar una URL a través de HTTP usando expresiones regulares

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

De esa forma, desea borrar toda la versión escalada de esta imagen una vez que se haya cargado una nueva. ¿Hay alguna manera?

Respuesta

9

probar esto:

si barniz 3.0 o superior.

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

Sure is is.

En VCL, desea utilizar el método de prohibición, documentado en "man vcl". Crea un filtro en las solicitudes entrantes. Si vas a usar esto a una velocidad de más de 2 veces por segundo, te recomiendo googlear "ban luker friendly" y volver a escribir las expresiones en consecuencia.

código no probado:

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

definen en primer lugar una lista blanca de quién puede utilizar la purga, a continuación, añadir la estrofa purgador en su 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."; 
} 

barniz utilizará el valor de la cabecera X-Purge-Regex para crear una prohibición.

Así entonces usted puede prohibir cosas como esta:

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 es la dirección del servidor de barniz.

+0

¿Alguna ayuda aquí? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –