Neu bei Varnish. . Es ist immer schwer, mehr als erwartet :-(Varnish Caching mit Keksen
Ich versuche, einige PHP-Code zu verbessern, vor einiger Zeit entwickelt, Lack mit Dieser Code verwendet nur zwei Cookies: PHPSESSID und SPRACHE
Alle Seiten gesetzt . PHPSESSID-Cookie, wenn es nicht definiert ist jedoch dieses Cookie für anonyme Sitzungen ist es nur auf einer Seite verwendet
Lassen sie uns sagen, ich habe Seiten 1, 2, Page3 und Page4 Meine Konfiguration sollte wie folgt lauten:..
Seiten 1, 2 und Seite3 benötigen LANGUAGE Cookie und sollten mit diesem Cookie zwischengespeichert werden: ein Cache fo r jede Sprache und Seite.
Page4 benötigt Cookies von PHPSESSID und LANGUAGE und sollte nicht im Cache gespeichert werden, wie es für jeden Benutzer spezifisch ist.
Meine default.vlc funktioniert nicht richtig, so würde jede Ausrichtung wirklich geschätzt werden. Vielleicht habe ich einige Konzepte missverstanden.
sub vcl_init {
# When requests come to Varnish I need to remove PHPSESSID so it's not used for the hash in caching. Page4 doesn't need caching as it's specific for each user:
if (req.http.host ~ "Page4") {
return(pass);
}
# remove PHPSESSID so pages1, 2, and 3 get cached just once for everyuser but in all languages.
if ((req.url !~ "page4")) {
set req.http.Cookie = regsuball(req.http.Cookie, "PHPSESSID=[^;]+(;)?", "");
}
return (hash);
}
Ich brauche Webseiten mit SPRACH Cookie zwischenzuspeichern, so schließe ich es in vcl_hash:
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
# hash cookies for requests that have them
if (req.http.Cookie) {
hash_data(req.http.Cookie);
}
}
Wie kann ich nur PHPSESSIONID entfernen?
sub vcl_backend_response {
# Called after the response headers has been successfully retrieved from the backend.
if (!(bereq.url ~ "Page4")) {
unset beresp.http.set-cookie;
}
return (deliver);
}