Question

Je veux utiliser Varnish pour mettre en cache certaines pages, même en présence de cookies. Il y a 3 possibilités que je dois prendre soin de:

  1. Un utilisateur anonyme visualise une page
  2. Un utilisateur connecté est une visualisation avec la personnalisation lumière. Ces personnalisations sont tous stockés dans un cookie signé et sont renseignés de manière dynamique par Javascript. Le cookie http varient en-tête n'est pas réglé.
  3. Un utilisateur connecté est avec la visualisation de certaines données personnalisées de la base de données. Le cookie varient http en-tête est défini.

Les comportements attendus seraient:

  1. Cache la page. Ceci est le scénario le plus fondamental pour Varnish à manipuler.
  2. Cache la page et ne pas supprimer le cookie, car une certaine logique Javascript a besoin.
  3. Ne jamais mettre en cache cette page car varient cookie signale le contenu des cookies affectera la sortie de cette page.

J'ai lu quelques docs sur Varnish et je ne peux pas dire si cela est le comportement par défaut ou s'il y a une certaine configuration je dois faire VCL pour y arriver.

Était-ce utile?

La solution

Seules les sessions sont uniques à chaque client, pas nécessairement les cookies.

Ce que vous voulez sens et est possible avec Varnish, il est juste une question de votre propre soigneusement artisanat vlc. S'il vous plaît faites attention aux parties du default.vcl suivantes:

sub vcl_recv {
    ...
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
      return (pass);
    }
}


sub vcl_hit {
    if (!obj.cacheable) {
        return (pass);
    }
    ...
}


sub vcl_fetch {
    if (!beresp.cacheable) {
        return (pass);
    }
    if (beresp.http.Set-Cookie) {
        return (pass);
    }
    ...
}

Vous devez remplacer ces pièces avec votre propre logique; à savoir définir vos propres fonctions de vcl_. Par défaut, les demandes (vcl_recv) et les réponses (vcl_fetch) avec les cookies ne sont pas cacheable. Vous connaissez le mieux votre application back-end et vous devez réécrire la logique de mise en cache générique pour ce cas spécifique. Autrement dit, vous devez définir dans quel cas le vernis fait une recherche, ou passer livrer.

Dans votre cas, vous aurez des pages (cas 1 et 2) sans varier par cookie qui sera mis en mémoire cache et partagée par tout le monde (demandes avec / sans cookies); il suffit de ne pas l'esprit req.http.Cookie dans vcl_recv. Je ne voudrais pas en cache les pages (cas 3) avec varier par biscuit -ou du moins pas de temps pour un long, car ils ne peuvent pas être partagées à tous; faire un 'passer' dans vcl_fetch.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top