2012-04-07 11 views
4

So verwende ich Lack zum ersten Mal. Ich habe einige Zeit damit verbracht, zu lesen, wie es funktioniert, aber ich bin nicht in der Lage herauszufinden, wie ich den Cache selektiv löschen.lack vcl spülen cache selektiv

mag sagen, ich habe eine URL wie diese

/?account=123&url=google.com 

und andere wie

/?account=123&url=stackoverflow.com 

Ich brauche den Cache zu löschen, wo account=123.

Ich kann nur herausfinden, dass

/? Konto = 123 & url = stackoverflow.com

auf

Säuberung Ausgabe den Cache nur reinigen, wo die URL mit PURGE Methode, um die eingehende URL entspricht.

Jede Hilfe wird geschätzt.

Antwort

4

Also das ist, was funktioniert. In Lack 3 wird selektive Spülung als Verbot bezeichnet. so müssen Sie

ban("obj.http.x-url ~ " + req.url); 
1

HTTP PURGE methos können Sie spezifische URL löschen.

zum Löschen mit regexp müssen Sie Telnet-Verbindung verwenden, um Admin-Port Lack oder Kommandozeilen-Tool varnishadm verwenden.

in der Regel können Sie dies tun, indem

telnet localhost 6082 

von telnet, nach dem Lack Server verbinden Sie Säuberungen mit Löschbefehl kann:

purge req.url ~ /?account=123 

oben wird jede URL-Zuordnung löschen „/? account = 123 "

Wenn Sie eine bestimmte Seite löschen möchten, wie Sie es mit HTTP PURGE tun, müssen Sie anstelle von Tilde (~)

das doppelte Gleichheitszeichen verwenden
purge req.url == /?account=123 

Sie können auch ganze Domain spülen mit

purge req.http.host == yourdomain.com 

oder bestimmte Seite auf Ihrer Domain:

purge req.http.host == yourdomain.com && req.url ~ /?account=123 
3

Wir haben ein ähnliches Problem verwenden konfrontiert und am Ende mit einem separaten X-Purge-Regex-URL-Request-Header zum Spülen Inhalts HTTP-Anforderungen verwendet wird.

Hier ist die VCL verwenden wir dies zu erreichen:

acl purge { 
    "localhost"; 
    "10.1.1.0"/28; 
} 

sub vcl_recv { 
    if (req.http.X-Purge-Regex-URL) { 
    if (!client.ip ~ purge) { 
     error 405 "Not allowed."; 
    } 
    ban_url(req.url); 
    error 200 "Banned URL"; 
    } 
} 

In Ihrem Fall, dass wir den Inhalt curl -H "X-Purge-Regex-URL: True" --head "http://my.host.addr/?account=123"

beachten Sie verwenden spülen könnte, dass ban_url() nicht über HTTP-Host schert. Es löscht alle übereinstimmenden URLs von allen Hosts.Wenn dies nicht gewünscht ist, sollten Sie ban() verwenden, um den Inhalt mit req.http.host und req.url zu verbieten.

0

Ich bin kein Lack-Experte, aber das ist, was für mich gearbeitet:

acl purge { 
    "localhost"; 
    "10.1.1.0"; 
} 

sub vcl_recv { 
    if (req.http.X-Purge-Regex-URL) { 
    if (!client.ip ~ purge) { 
     error 405 "Not allowed."; 
    } 
    ban_url(req.url); 
    #error 200 "Banned URL"; 
    } 
} 

Beachten Sie, dass ich aus der error 200 "Banner URL" kommentiert - was in meinem meinem Fall das Problem verursacht wurde.