Comment mettre en cache des sites Web à l'aide de vernis, PHP et Cookies

Je considère commencer à utiliser le vernis sur mes sites Web. Je viens d'essayer le vernis et je me request comment mettre en cache des pages, même si mes sites Web utilisent des cookies, pour Google Analytics. J'essaie de les supprimer, mais il semble que le vernis ne cache pas. C'est comme ça que ma configuration ressemble; http://pastie.org/1254664 . Si cela count, j'ai un server Debian et un server utilisant Ubuntu Server. Alors, comment puis-je mettre en cache le site même si j'utilise des cookies?

Merci d'avance!

Addition: Je ne reçois aucun X-Cache: HIT / MISS non plus. Qu'est-ce que je fais mal?

6 Solutions collect form web for “Comment mettre en cache des sites Web à l'aide de vernis, PHP et Cookies”

Je suis assez nouveau pour mettre en cache avec du vernis, mais voici ce que j'ai appris jusqu'à présent: il faut plusieurs facteurs à considérer lors de l'utilisation de vernis pour la caching contre une application.

Dans votre cas, savez ce que les cookies sont en train de définir et dans quel but. Si le vernis voit un cookie avec votre request, vous serez transmis au backend, ce qui entraînera une erreur de cache.

Google Analytics Cookies

Si vous utilisez les cookies de Google Analytics, vous pouvez les désintégrer sans risque dans le vernis; ne vous inquiétez pas, vous serez toujours datatables dans vos rapports AG. Utilisez quelque chose comme ça dans votre vcl_recv

 set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[az]+|__utma_a2a)=[^;]*", ""); 

Vous pouvez essayer plusieurs autres lignes de nettoyage, également dans le vcl_recv

Retirer ";" préfixes de Cookies

 set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", ""); 

Désactiver les cookies vides

 if (req.http.Cookie ~ "^\s*$") { unset req.http.Cookie; } 

Cookies spécifiques à l'application

Si votre application définit un cookie lorsqu'un user se connecte pour effectuer une fonction, ces requêtes ne doivent pas être mises en cache et envoyées directement au backend. Sinon, vous pouvez mettre en cache les pages vues par les users connectés (mauvais).

Utilisez quelque chose comme ceci:

 if (req.http.Authorization || req.http.Cookie) { return (pass); } 

HTH et bonne chance.

modifier

Utilisez ceci pour voir ce que le vernis de vernis voit venir:

 varnishtop -i RxHeader -I Cookie 

Si vous regex en manque, prenez-les ici!

Je ne connais pas de vernis. Mais selon mon expérience dans l'administration du server, essayez les choses dans votre LAN d'abord, que de passer à Internet.

C'est ce que l'en-tête Vary dans http est pour: les variations qui devraient returnner la même ressource. Le vernis comprend une Vary: cookies .

Si vous n'obtenez pas d'en-têtes X-Cache, vous ne vous connectez pas au cache du tout; Êtes-vous sûr de fonctionner sur le bon ip / port?

Vous pouvez passer certaines parties de votre site à sauvegarder sans mettre en cache.

Exemple le plus simple pour les blocs vcl_recv et vcl_fetch:

 sub vcl_recv { if (req.url ~ "^/somescript.php") { return (pass); } else { unset req.http.Cookie; } return(lookup); } sub vcl_fetch { if (req.url ~ "^/somescript.php") { return (pass); } else { unset req.http.Cookie; } return(deliver); } 

Lire – lisez ceci pour comprendre pourquoi le vernis manque

exécutez le vernissage et voyez si vous passez réellement par un vernis

Ma recommandation est de vérifier les URL dont vous avez vraiment besoin de cookies (p. Ex., Le panneau d'administration) et de supprimer les cookies pour toutes les autres URL. Voir ci-dessous un exemple:

 sub vcl_recv { if (req.url ~ "^/admin/") { # administration panel set req.http.admin = 1; } else { # public web site, ignore client request for fresh content, remove cookies unset req.http.Cache-Control; unset req.http.Max-Age; unset req.http.Pragma; unset req.http.Cookie; } ... } sub vcl_fetch { if (req.http.admin == 1) { # administration panel return (hit_for_pass); } else { # public web site, not allowed to set cookies unset beresp.http.Set-Cookie; ... } ... } 
  • vernis: corps de réponse inversée
  • Vernis Portée d'expression régulière Portée
  • Comment rediriger de www vers non www vernis
  • Commande: 1. nginx 2. vernis 3. haproxy 4. serveur web?
  • Verrouillage cache responese avec l'en-tête "Set-Cookie"
  • Iptables PREROUTING pour redirect le vernis 80 du portail pour l'IP sélectionnée
  • HAPROxy / Vernis: redirigeant un pourcentage de trafic
  • Le vernis peut-il ignorer le coup-for-pass lorsque les backends sont malades
  • Changement de vernis 4 503 erreur
  • Verrouillage "FetchError no backend connection" erreur
  • Réglages de memory pour magento avec php5-fpm, Nginx, APC, Mysql
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.