Cache de verniz - TTL padrão?

23

Descobri que posso definir o TTL no Varnish da seguinte maneira no meu arquivo VCL:

sub vcl_fetch {
    # 1 minute
    set obj.ttl = 1m;
}

Mas qual é a configuração padrão (supondo que o servidor back-end não esteja configurando nenhum cabeçalho de controle de cache)?

Ade
fonte
Parece que eu encontrei a resposta: 120 segundos - isso está na lógica VCL padrão.
Ade 15/05

Respostas:

24

Este está no modelo padrão:

sub vcl_fetch {
    if (beresp.ttl <= 0s ||
        beresp.http.Set-Cookie ||
        beresp.http.Vary == "*") {
                /*
                 * Mark as "Hit-For-Pass" for the next 2 minutes
                 */
                set beresp.ttl = 120 s;
                return (hit_for_pass);
    }
    return (deliver);
}

Então, 120 segundos.

Bart De Vos
fonte
Onde você encontrou o modelo padrão?
30513 Neil
Existe um default.vcl que é fornecido com verniz a partir de pelo menos 3.0.3, que possui todas as sub-rotinas de configuração padrão comentadas. A configuração 4.0 padrão pode ser visto aqui: github.com/mattiasgeniar/varnish-4.0-configuration-templates/...
th3morg
2
Isso não reflete minhas observações. É verdade que o ttl padrão é 120 segundos, mas a fonte desse número não pode ser esse snippet. Se fosse, objetos sem ttl seriam marcados como hit_for_pass, mas na verdade eles permanecem no cache por 120 segundos.
Kritzefitz
Você encontrará a fonte do vcl incorporado aqui - github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/… . Use as varnish-<version>tags para ver a versão do seu lançamento do Varnish.
Danny Thomas
34

O TTL padrão pode ser passado através do comando varnishd por meio da -topção de linha de comando e provavelmente é originado de um arquivo de propriedades em seu sistema de arquivos. No sistema CentOS, eu estou olhando para ele é definido usando DEFAULT_TTLfrom /etc/sysconfig/varnish.

Você pode ver a configuração ao vivo usando varnishadm assim,

varnishadm param.show default_ttl

Na verdade, a lógica VCL padrão a seguir se refere a objetos não armazenáveis ​​em cache.

  sub vcl_fetch {
      if (beresp.ttl <= 0s ||
          beresp.http.Set-Cookie ||
          beresp.http.Vary == "*") {
                  /*
                   * Mark as "Hit-For-Pass" for the next 2 minutes
                   */
                  set beresp.ttl = 120 s;
                  return (hit_for_pass);
      }
      return (deliver);
  }

significa "se o objeto não estiver armazenável em cache - transmita solicitações do cliente para que esse objeto faça back-end direta e simultaneamente por 2 minutos, não os coloque na fila"

Leia mais em /programming/12691489/varnish-hit-for-pass-means

Sergej Alikov
fonte