Varnish Cache nicht Zwischenspeichern von PHP mit Sessions, Wenn backend-TTL verändert
Ich bin neu Lackieren Cache und habe eine Frage ich hoffe ich kann einigen helfen mit.
Habe ich eine sehr einfache und grundlegende setup-aber es funktioniert nicht so wie ich das verstehe
sollte es aus irgendeinem Grund.
Hängt es mit dem Lack nicht Zwischenspeichern der PHP-Seiten verwenden cookies.
Hier ist mein setup:
1) Für mein Standard.vcl habe ich eine einfache backend
backend default {
.host = "127.0.0.1";
.port = "80";
}
2) ich habe eine einfache PHP-Datei, die nur diese beiden Zeile:
session_start();
echo time();
3)
Wenn ich diese Seite richtig nicht im cache
als ich noch in der erforderlichen vcl Regeln
4)
So, wie pro mein Verständnis von den Unterlagen, die ich hinzufügen
in diesen zwei Regeln
sub vcl_recv {
unset req.http.Cookie;
return (lookup);
}
sub vcl_fetch {
unset beresp.http.Set-Cookie;
return(deliver);
}
5)
Die PHP-Seite wird immer noch nicht cache.
Ich kann sehen, dass die Set-Cookie
- header wurde
entfernt, da bin ich mit FireBug in FireFox.
Ist es nur, wenn ich dies hinzufügen sub vcl_fetch
dass der PHP-cache:
set beresp.ttl = 24h;
Meine Frage ist, ist das richtig?
Ich glaube nicht, dass ich brauchen würde, um die ttl ändern
der backend-Reaktion. Ich dachte einfach lösche
cookies in-und out-zwingen würde PHP w/session cache.
Meine komplette Standard-vcl ist:
backend default {
.host = "127.0.0.1";
.port = "80";
}
sub vcl_recv {
unset req.http.Cookie;
return (lookup);
}
sub vcl_fetch {
unset beresp.http.Set-Cookie;
set beresp.ttl = 24h;
return(deliver);
}
Mein start Befehl ist:
varnishd -f /etc/varnish/default.vcl -s malloc,128M -T 127.0.0.1:2000 -a 0.0.0.0:8080
Die URL, die ich fordere, ist:
http://vbox.local:8080/varnish-tests/index.php
Meine index.php die Datei hat nur:
<?php
session_start();
echo time();
Ich würde Sie gerne Fragen, wie die Gemeinde, ob das richtig aussieht
oder, wenn ich falsch bin. Eigentlich bin ich nur unsicher, warum hatte ich
zum hinzufügen beresp.ttl = 24h, schließlich haben Sie den seitencache
in Lack.
Dachte ich, ich würde nicht brauchen.
Jede Beratung sehr geschätzt.
Danke!
Freundlichen GRÜßEN.
Hey Frank. Dein Kommentar macht absolut Sinn. Ich war nur unsicher, da ich nicht bemerkt, nichts in der Dokumentation über die Einstellung der beresp.ttl Bezug auf caching-cookies. Vielleicht habe ich Nebel, der in der Dokumentation. Ich habe über 30 Minuten meinen Kopf kratzen, bis ich 'dachte' es aus. Nochmals vielen Dank.
Etwas zu beobachten, wenn caching für PHP Antworten, die sich mit sessions: PHP-Skript standardmäßig senden anti-caching-Header. Wenn der Lack gehorchen diese Header, die Sie haben können Schwierigkeiten auf der ganzen Linie, wenn Sie erwarten, dass bestimmte caching-Verhalten (sobald Sie bei der Lösung Ihres aktuellen Problems, das völlig unzusammenhängende).
Siehe auch stackoverflow.com/questions/9009966/...
InformationsquelleAutor Jacob | 2011-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lack halten die caching-Header auf die Antwort. PHP senden von cache-control-Header, NICHT die Antwort Zwischenspeichern von deafult
Müssen Sie deaktivieren diese Header sonst Lack halten wird und somit nicht den cache der Seite. Um Sie auszuschalten, rufen Sie einfach session_cache_limiter() mit einem leeren string
Können Sie fügen Sie dann einen header set cache-control public. Mit den drei oben genannten Zeilen wird die Zwischenspeicherung aktivieren.
InformationsquelleAutor Joshua Ostrom
Als ZoFreX sagte, das ist wahrscheinlich, weil der Cache-Control-oder Expires-header.
Beachten Sie auch, dass diese Regel ein wenig gefährlich :
Wenn Ihr server sendet cookies, das ist wahrscheinlich, weil Sie Sie brauchen, zumindest für Sitzungen.
Diese Art von Regel wird völlig deaktivieren, session-management von application-server.
Je nach, warum Sie sessions verwenden, können Sie nicht cache-jedem Teil von Ihrem Inhalt (zB : Benutzer-spezifischen Inhalten).
InformationsquelleAutor Gauthier Delacroix
Sollten Sie sich sehr sorgfältig in die Header PHP senden zu Lackieren (z.B. durch Zugriff auf Ihren server direkt und nicht über varnishd). Wenn die Header sagen, dass die Inhalte nicht zwischengespeichert werden, ist es nicht. Wenn Sie nicht sagen, dass es zwischengespeichert werden kann, wird es nicht werden - und ich vermute, das ist der Grund, warum der Lack nur Zwischenspeichern, wenn Sie manuell einstellen-ttl, da der Header nicht "verfällt" oder "max-age".
InformationsquelleAutor ZoFreX
Der einfachste Weg, um eine Antwort im Cache Lack wäre das hinzufügen der cache-control-header.
php:
erzählen würde Lack cache, um die Reaktion für 60 Sekunden.
InformationsquelleAutor moritz
Ich hatte genau das gleiche problem. Wenn Sie ein session_start, es wird angezeigt, dass PHP Hinweise, die Seite ist möglicherweise dynamisch und hilfsbereit, setzt der cache-control-Header:
Die Standard-Konfiguration der Lack befolgt diese caching-Direktiven gesendet von apache/php, was bedeutet, es wird nicht cache-Seiten. Ich bin mir nicht 100% sicher, es ist möglich, das überschreiben der Standard-Konfiguration entweder, nur, um es zu erweitern.
Die Problemumgehung, die ich habe verwenden, ist die re-stellen Sie die Cache-Control-Header, aber beachten Sie, dass dies getan werden muss, nach dem session_start Ihnen geändert hat. Ich habe nicht getestet, um zu sehen, wenn es auch sein muss nach der session_write_close auch, aber besser safe als sorry.
InformationsquelleAutor Li1t