Como fazer o verniz ignorar, não excluir cookies

6

Eu quero usar o Varnish para armazenar certas páginas, mesmo na presença de cookies. Existem 3 possibilidades que eu preciso cuidar:

  1. Um usuário anônimo está visualizando alguma página
  2. Um usuário conectado visualiza uma página com personalização leve. Essas personalizações são armazenadas em um cookie assinado e são dinamicamente preenchidas por Javascript. O cabeçalho http vary-cookie não está definido.
  3. Um usuário conectado está visualizando alguma página com dados personalizados do banco de dados. O cabeçalho http vary-cookie está definido.

Os comportamentos esperados seriam:

  1. Cache a página. Este é o cenário mais básico para o verniz manipular.
  2. Armazene a página em cache e não exclua o cookie porque alguma lógica Javascript precisa disso.
  3. Nunca coloque em cache esta página porque o cookie variável está sinalizando que o conteúdo do cookie afetará a saída desta página.

Eu li alguns documentos sobre o Varnish e não posso dizer se esse é o comportamento padrão ou se há alguma configuração que tenho que fazer na VCL para que isso aconteça.

    
por Jason Christa 24.11.2010 / 22:40

2 respostas

3

Por padrão, o Varnish não armazena em cache solicitações com um cabeçalho Cookie:

link

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

Você precisa codificar o comportamento que deseja na configuração. Esteja ciente de que o Cookie é parte da solicitação do cliente, não da "página" (objeto, na verdade). A "página" (objeto) vem com um cabeçalho "Set-Cookie" - esse é o que será armazenado em cache.

Além disso, "Vary: Cookie" não significa "não armazenar em cache". Significa armazenar um objeto em cache para cada valor de Cookie recebido.

Se o seu aplicativo não gerar conteúdo com base no Cookie, provavelmente é seguro ignorá-lo:

-      if (req.http.Authorization || req.http.Cookie) {
+      if (req.http.Authorization) {

Faça alguns testes e você vai pegar o jeito dele. Espero que isso ajude.

    
por 25.11.2010 / 12:48
0

Se eu entendi corretamente, você não quer um cookie específico como parte da chave - mas você precisa deixá-lo intacto?

Você precisa configurar o hash em vcl_hash para ser req.url + req.http.host (e possivelmente outros), mas não o cookie específico.

Acho que um dos meus posts pode ajudar você na direção certa: Ignorando os parâmetros GET em verniz VCL

    
por 25.11.2010 / 13:12