![So umgehen Sie den Varnish-Cache basierend auf einem bestimmten Header](https://rvso.com/image/782629/So%20umgehen%20Sie%20den%20Varnish-Cache%20basierend%20auf%20einem%20bestimmten%20Header.png)
Ich arbeite seit zwei Tagen daran, aber ohne Erfolg.
Grundsätzlich möchte ich den Varnish-Cache für eine bestimmte eingehende Anforderungs-URL umgehen.
Ich habe diese Regel definiert:
sub vcl_recv {
if (req.url ~ "/en/reading-books/") { return(pass); }
}
Aber wenn ich die Seite aktualisiere, wird sie immer noch zwischengespeichert und die Antwortheader geben Folgendes zurück:
via: 1.1 varnish-v4
x-varnish: 2
und dieser im Hintergrund ausgeführte Befehl erzeugt eine Ausgabe:
varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'
Was übersehe ich hier? Ich bin für jeden Hinweis dankbar.
Antwort1
Upgrade auf eine unterstützte Version
Bevor ich über das Debuggen des Caching dieser eingehenden URL spreche, möchte ich darauf hinweisen, dassSie verwenden eine veraltete Version von Varnish, die bekannte Sicherheitslücken aufweist.
Bitte aktualisieren Sie entweder auf die neueste Version oder verwenden Sie Varnish Cache 6.0 LTS.
Sehenhttps://www.varnish-software.com/developers/tutorials/#installationsfür eine Liste mit Installationshandbüchern für verschiedene Linux-Distributionen.
Übereinstimmung mit einer genauen URL oder einem URL-Muster
Der von Ihnen freigegebene VCL-Code umgeht den Cache für /en/reading-books
. Versuchen Sie, eine genaue Übereinstimmung mit dieser URL oder ein Muster zu erzielen, das mit einer Reihe von URLs übereinstimmt?
Für eine exakte Übereinstimmung würde ich die URL wie folgt anpassen:
sub vcl_recv {
if (req.url == "/en/reading-books/") {
return(pass);
}
}
Beim Abgleichen mehrerer URLs, die alle mit beginnen /en/reading-books/
, würde ich die VCL wie folgt anpassen:
sub vcl_recv {
if (req.url == "^/en/reading-books/.*$") {
return(pass);
}
}
Was ist mit den Varnish-spezifischen Antwortheadern?
Sie haben in Ihrer Frage folgende Überschriften erwähnt:
via: 1.1 varnish-v4
x-varnish: 2
Diese zeigen an, dass Sie Varnish verwenden, nicht unbedingt, dass Varnish die Antwort aus dem Cache bereitstellt.
Der via
Header informiert den Benutzer lediglich darüber, dass Varnish ein Proxyserver in der Antwortkette ist.
Der Wert des x-varnish
Headers bezieht sich normalerweise auf die ID der Transaktion, die Ihre Anfrage bearbeitet hat.
Tatsächlich ist es der Age
Header, der angibt, wie lange eine Antwort aus dem Cache bereitgestellt wurde.
Überprüfen der Protokolle
Der varnishncsa
Befehl hat Zugriff auf die Varnish Shared Memory-Protokolle, zeigt aber nicht wirklich viele nützliche Caching-Informationen an.
Der Zweck varnishncsa
besteht darin, Zugriffsprotokollinformationen zurückzugeben, ähnlich denen, die Apache und Nginx zurückgeben.
Bitte führen Sie den folgenden Befehl aus, um das Caching zu debuggen:
varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"
Während varnishncsa
eine einzeilige Antwort im NCSA-Format erzeugt wird, varnishlog
wird die vollständige Transaktion zurückgegeben. Bitte fügen Sie die Ausgabe varnishlog
zu Ihrer Frage hinzu und ich helfe Ihnen beim Debuggen.