2011-07-20 1 views
0

Je configure le vernis pour la première fois et je suis tombé sur un problème pour lequel je n'ai pas encore trouvé de réponse complète.Varnish - cache lorsque les cookies/sessions sont fournis dans le round robin director

Ma config en un mot:

server0 - vernis, BE1 - apache, be2 - apache

vernis

tire des 2 backends dans un tournoi à la ronde. J'ai besoin de gérer des sessions, j'ai donc configuré un simple script php qui définit l'heure actuelle dans une variable de session, puis redirige vers une deuxième page qui affiche cette variable de session et l'ip du backend utilisé.

J'ai réussi à faire fonctionner cette moitié. C'est passer l'information de session de ce que je peux voir, mais voici le problème - l'information retournée par le backend est spécifique au backend sur lequel elle a été générée. Ainsi, le temps retourné dépendra si be1 ou be2 a été appelé pour le dernier cache.

Y a-t-il un moyen de faire en sorte que cela fonctionne pour que la variable de session soit la même quel que soit le backend qui la traite?

Répondre

6

Ceci est le problème général avec les sessions; un cookie (envoyé avec chaque requête) contient un identifiant pour la session. Les données de session réelles sont stockées sur un serveur ou dans une base de données. Il existe plusieurs solutions pour cela, par exemple:

  1. Sessions adhésives; Définissez une variable de cookie supplémentaire (par exemple be = 1 ou be = 2) ou faites en sorte que l'identifiant de session appartienne de manière reconnaissable au backend 1 ou 2. Varnish peut alors décider du serveur backend auquel la requête doit accéder. Si un backend descend, votre session est perdue (pas « session fail over »)
  2. stocker les données de session dans une base de données, memcached, ou d'un autre magasin de données partagée par tous les backends
  3. Ne pas utiliser les sessions, mais sérialiser tous vos données dans un cookie. Comme les clients ne sont pas fiables (les cookies peuvent être modifiés par un client), assurez-vous de vérifier si les données ne sont pas traitées, par ex. signez vos données

Cherchez une bibliothèque/code réutilisable que vous pouvez appliquer pour votre code et bonne chance!

+1

Merci tas :) Je voudrais vous voter mais j'ai besoin de 15 rep. Cela m'a donné un très bon point de départ. – drinxy