Vernis Cache pas Cache en PHP, avec des Séances à Moins backend TTL modifié
Je suis nouveau sur le Vernis Cache et avez une question j'espère que je peux obtenir de l'aide.
J'ai une question très simple et configuration de base, mais il ne fonctionne pas comme je le comprends
il doit pour une raison quelconque.
Que c'est lié à Vernis pas la mise en cache des pages PHP qui sont à l'aide des cookies.
Voici ma configuration:
1) Pour ma par défaut.vcl j'ai un simple backend
backend default {
.host = "127.0.0.1";
.port = "80";
}
2) j'ai un simple fichier PHP qui n'a que ces deux lignes:
session_start();
echo time();
3)
Lorsque j'appelle cette page correctement, ne pas mettre en cache
comme je n'ai pas ajouté dans la vcl règles
4)
Donc, selon ma compréhension de la documentation-je ajouter
dans ces deux règles
sub vcl_recv {
unset req.http.Cookie;
return (lookup);
}
sub vcl_fetch {
unset beresp.http.Set-Cookie;
return(deliver);
}
5)
La page PHP n'est toujours pas en cache.
Je peux voir le Set-Cookie
en-tête a été
supprimés, comme je suis à l'aide de FireBug dans FireFox.
C'est que si j'ajoute du sous vcl_fetch
que le code PHP cache:
set beresp.ttl = 24h;
Ma question est est-ce correct?
Je ne pense pas que j'aurais besoin de modifier le ttl
de le backend de réponse. Je pensais juste à la suppression
les témoins en aurait la force de PHP w/session de cache.
Mon entière par défaut vcl est:
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);
}
Ma commande est:
varnishd -f /etc/varnish/default.vcl -s malloc,128M -T 127.0.0.1:2000 -a 0.0.0.0:8080
L'URL que j'ai fais appel est:
http://vbox.local:8080/varnish-tests/index.php
Mon index.php fichier a seulement:
<?php
session_start();
echo time();
Je voudrais demander à la communauté si cela semble correct
ou si je me trompe. Essentiellement, je suis juste pas sûr pourquoi, j'ai eu
ajouter le beresp.ttl = 24h pour avoir enfin le cache de la page
dans le vernis.
Je pensais que je n'aurais pas besoin de cela.
Tout conseiller apprécié.
Merci!
Salutations.
Hey Frank. Votre commentaire est tout à fait sensé. J'étais juste pas sûr que je n'ai pas remarqué quoi que ce soit dans les docs sur le réglage de la beresp.ttl liées à la mise en cache de cookies. Peut-être que je le brouillard que dans les docs. J'ai passé plus de 30 minutes de me gratter la tête jusqu'à ce que je 'compris'. Merci encore.
Quelque chose à regarder pour quand le cache PHP réponses sessions: PHP par défaut envoyer anti-mise en cache des en-têtes. Si le Vernis est d'obéir à ces en-têtes, vous pouvez avoir des difficultés en bas de la ligne, si vous êtes enceinte spécifique comportement de mise en cache (une fois que vous résoudre votre problème actuel, qui est entièrement étrangères).
Voir aussi stackoverflow.com/questions/9009966/...
OriginalL'auteur Jacob | 2011-03-29
Vous devez vous connecter pour publier un commentaire.
Vernis obéir à la mise en cache des en-têtes de la réponse. PHP va envoyer-tête cache-control pour ne PAS mettre en cache la réponse par défaut
Vous avez besoin de désactiver une de ces en-têtes sinon le Vernis va obéir et donc de ne pas mettre en cache la page. Pour les désactiver, composez simplement session_cache_limiter() avec une chaîne vide
Vous pouvez ensuite ajouter un en-tête pour fixer le cache-control pour le public. En utilisant les trois lignes ci-dessus va activer la mise en cache.
OriginalL'auteur Joshua Ostrom
Comme ZoFreX dit, c'est probablement parce que votre Cache-Control ou d'en-tête Expires.
Également noter que cette règle est un peu dangereux :
Si votre serveur envoie des cookies, c'est probablement parce que vous en avez besoin, au moins pour les sessions.
Ce genre de règle de totalement désactiver la gestion de session de l'application serveur.
En fonction de pourquoi vous avez des sessions d'utilisation, vous ne pouvez pas mettre en cache chaque partie de votre contenu (par exemple : spécifique à l'utilisateur, contenu).
OriginalL'auteur Gauthier Delacroix
Vous devez examiner très attentivement les en-têtes de PHP est l'envoi de Vernis (par exemple, en accédant à votre serveur directement, plutôt que par le biais de varnishd). Si les en-têtes de dire que le contenu ne peut pas être mis en cache, il ne sera pas. S'ils ne disent pas qu'il peut être mis en cache, il ne sera pas - et je suppose que c'est pourquoi Vernis est seulement la mise en cache si vous réglez manuellement la durée de vie, comme les en-têtes n'ont pas de "date d'expiration" ou "max-age".
OriginalL'auteur ZoFreX
La façon la plus simple d'obtenir une réponse en cache par un vernis serait d'ajouter l'entête cache-control.
php:
dirais vernis pour mettre en cache la réponse dans les 60 secondes.
OriginalL'auteur moritz
J'ai eu exactement le même problème. Quand tu fais un session_start, il semble que PHP avis que la page est potentiellement dynamique et bienveillant réinitialise le cache en-têtes de contrôle:
La configuration par défaut de Vernis obéit à ces consignes de mise en cache envoyé par apache/php, le sens qu'il ne cache ces pages. Je ne suis pas sûr à 100%, il est possible de surcharger la configuration par défaut, uniquement pour le prolonger.
La solution de contournement que j'ai utilisé est de rétablir à-tête Cache-Control, mais cela doit être fait après le session_start a changé. Je n'ai pas testé pour voir si elle aussi a besoin d'être après la session_write_close aussi, mais mieux vaut prévenir que guérir.
OriginalL'auteur Li1t