So umgehen Sie den Varnish-Cache basierend auf einem bestimmten Header

So umgehen Sie den Varnish-Cache basierend auf einem bestimmten Header

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 viaHeader informiert den Benutzer lediglich darüber, dass Varnish ein Proxyserver in der Antwortkette ist.

Der Wert des x-varnishHeaders bezieht sich normalerweise auf die ID der Transaktion, die Ihre Anfrage bearbeitet hat.

Tatsächlich ist es der AgeHeader, der angibt, wie lange eine Antwort aus dem Cache bereitgestellt wurde.

Überprüfen der Protokolle

Der varnishncsaBefehl hat Zugriff auf die Varnish Shared Memory-Protokolle, zeigt aber nicht wirklich viele nützliche Caching-Informationen an.

Der Zweck varnishncsabesteht 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 varnishncsaeine einzeilige Antwort im NCSA-Format erzeugt wird, varnishlogwird die vollständige Transaktion zurückgegeben. Bitte fügen Sie die Ausgabe varnishlogzu Ihrer Frage hinzu und ich helfe Ihnen beim Debuggen.

verwandte Informationen