Frage

Ich möchte Lack verwenden, um bestimmte Seiten auch in Gegenwart von Cookies zwischenzuspeichern. Es gibt 3 Möglichkeiten, die ich kümmern müssen:

  1. Ein anonymer Benutzer gerade eine Seite
  2. Ein angemeldeten Benutzer wird eine Seite mit Licht Anpassung sehen. Diese Anpassungen sind alle in einem signierten Cookie gespeichert und werden von Javascript dynamisch bevölkert. Der variieren-Cookie HTTP-Header nicht gesetzt ist.
  3. A angemeldet Benutzer gerade eine Seite mit individuellen Daten aus der Datenbank. Der variieren-Cookie HTTP-Header gesetzt.

Das erwartete Verhalten sei:

  1. Cache der Seite. Dies ist das einfachste Szenario für Lack zu behandeln.
  2. Cache der Seite und löscht das Cookie nicht, weil einige Javascript Logik es braucht.
  3. Nie diese Seite zwischenspeichern, da variieren-Cookie die Cookie-Inhalte signalisiert die Ausgabe dieser Seite beeinflussen.

Ich habe einige Dokumente auf Varnish lesen und ich kann nicht sagen, ob dies das Standardverhalten ist oder wenn es einige Setup ist, ich habe in VCL zu tun, um sie geschehen.

War es hilfreich?

Lösung

Nur Sitzungen sind einzigartig für jeden Kunden, die nicht unbedingt Cookies.

Was Sie machen Sinn wollen und sind mit Lack, ist es nur eine Frage der sorgfältig Ihre eigene vcl anfertigt. Bitte achten Sie auf die folgenden Teile des default.vcl:

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);
    }
    ...
}

Sie haben diese Teile mit Ihrer eigenen Logik zu ersetzen; das heißt definieren Sie Ihre eigenen vcl_ Funktionen. Standardmäßig Anfragen (vcl_recv) und Antworten (vcl_fetch) mit Cookies sind nicht zwischenspeicherbar. Sie kennen Ihre Back-End-Anwendung am besten und Sie sollen die generische Caching-Logik zu diesem speziellen Fall neu zu schreiben. Das heißt, sollten Sie definieren, in dem Fall Lack ist ein Lookup, übergeben oder liefern.

In Ihrem Fall haben Sie Seiten (Fall 1 und 2) ohne eine variieren-von Cookies, die im Cache gespeichert werden und geteilt durch all (Anfragen mit / ohne Cookies); einfach nicht req.http.Cookie in vcl_recv kümmern. Ich würde nicht Cache-Seiten (Fall 3) mit einem variieren-von Cookie -oder zumindest nicht für eine lange Zeit, da sie überhaupt nicht gemeinsam genutzt werden kann; Sie ein 'Pass' in vcl_fetch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top