Domanda

voglio usare Varnish per memorizzare nella cache alcune pagine, anche in presenza di cookie. Ci sono 3 possibilità che ho bisogno di prendersi cura di:

  1. utente Un anonimo sta visualizzando qualche pagina
  2. Un login utente sta visualizzando qualche pagina con personalizzazione luce. Queste personalizzazioni sono tutti memorizzati in un-cookie firmato e sono dinamicamente popolati da JavaScript. Il variano-cookie http intestazione non è impostato.
  3. Un login utente sta visualizzando qualche pagina con i dati personalizzati dal database. Il variano-cookie http intestazione è impostato.

I comportamenti attesi sarebbero:

  1. Cache della pagina. Questo è lo scenario di base per Varnish per la maniglia.
  2. Cache della pagina e non cancellare il cookie perché una certa logica Javascript ne ha bisogno.
  3. Mai cache questa pagina perché variano-cookie sta segnalando il contenuto dei cookie influenzerà l'output della pagina.

Ho letto alcuni documenti sulla vernice e non posso dire se questo è il comportamento di default o se c'è qualche messa a punto devo fare in VCL per farlo accadere.

È stato utile?

Soluzione

Solo sessioni sono uniche per ogni cliente, non necessariamente i cookie.

Che cosa si vuole senso ed è possibile con Varnish, è solo una questione di lavorazione con attenzione il proprio VCL. Si prega di prestare attenzione alle seguenti parti del 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);
    }
    ...
}

si deve sostituire queste parti con la propria logica; vale a dire definire funzioni vcl_. Per impostazione predefinita, le richieste (e le risposte) vcl_recv (vcl_fetch) con i cookie non sono in cache. Sai che l'applicazione di back-end migliore e si dovrebbe riscrivere la logica di caching generico per questo caso specifico. Che è, si dovrebbe definire in cui la vernice caso non una ricerca, passare o consegnare.

Nel tuo caso, si dovrà pagine (caso 1 e 2) senza variano da-biscotto, che sarà memorizzata nella cache e condivisa da tutti (le richieste con / senza cookie); solo che non importa req.http.Cookie in vcl_recv. Non vorrei pagine cache (caso 3) con un variare a-by biscotto -o almeno non per un lungo tempo-, in quanto non possono essere condivise a tutti; Fare un 'pass' in vcl_fetch.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top