Wir haben die folgende URL, die wir per Proxy-Cache speichern möchten:
file.php?parameter=one¶mater2=two&r=EPOCHTIMESTAMP
Der Abfragezeichenfolgenparameter „parameter“ variiert zwischen den Anforderungen. Das Gleiche gilt für „parameter2“.
Der Abfragezeichenfolgenparameter r ist ein Zeitstempel, den wir verwenden, um sicherzustellen, dass der Client keinen zwischengespeicherten (auf der Clientseite) Inhalt bereitstellt. Auch bekannt als „Cache-Buster“. Ja, wir verwenden auch alle entsprechenden „Don't-Cache“-Header h.
Nun möchten wir einige dieser Anfragen über nginx im Proxy-Cache speichern. Ist es möglich, nginx anzuweisen, den Abfrageparameter r zu ignorieren, aber alle anderen zu verwenden, wenn ein Cache-Schlüssel für den Eintrag festgelegt wird? Wenn wir den Parameter r nicht ignorieren können, ist der Proxy-Cache von nginx nutzlos, da jeder Cache-Schlüssel eindeutig ist.
Danke.
Antwort1
Wir haben eine Lösung für diese Frage gefunden.
Die richtige Methode hierfür besteht darin, einen Cache-Schlüssel mithilfe von Nginx- $arg_...
Variablen zu erstellen. $arg_...
enthält Abfragezeichenfolgenparameter. Im obigen Beispiel würden wir also $arg_parameter
und $arg_parameter2
innerhalb des Cache-Schlüssels verwenden.
Das Ergebnis nginx.conf
sieht dann so aus:
http {
...
server {
location / {
...
proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
}
}
...
}
Beachten Sie, dass Abfrageparameter, die einen Bindestrich enthalten, wie z. B. data-*
Parameter, mit der Syntax nicht funktionieren $arg_paramName
. Eine Problemumgehung mit Lua finden Sie unterdieser Beitrag.