Como eu configuro uma TTL de resposta do verniz dinamicamente?

7

meu script php está enviando um cabeçalho X_Cache_ttl: 1h e no meu arquivo de configuração do verniz eu tenho

sub vcl_fetch
{
    if(beresp.http.X-Cache-ttl){
            set beresp.ttl = beresp.http.X-Cache-ttl;
    }
}

mas a linha com o comando set está causando falha no verniz quando tento iniciá-lo.

no log eu recebo

Expression has type STRING, expected DURATION
('input' Line 116 Pos 34) -- ('input' Line 116 Pos 56)
            set beresp.ttl = beresp.http.X-Cache-ttl;

Como faço para converter X-Cache-ttl para uma duração para que eu possa definir dinamicamente o TTL?

Gostaria de evitar várias declarações if semelhantes a

if(beresp.http.X-Cache-ttl == "60s") {
    set beresp.ttl = 60s;
}

if(beresp.http.X-Cache-ttl == "1h") {
    set beresp.ttl = 1h;
}

Se for importante, estou usando o verniz 3.0.3 no centos 6.

    
por DiverseAndRemote.com 29.05.2013 / 16:07

2 respostas

9

O módulo vmod_std tem uma função que deve fazer o que você procurando por.

import std; no topo da VCL, então isso deve funcionar:

sub vcl_fetch
{
    set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h);
}

.. onde o 1h é seu padrão se o cabeçalho não estiver definido.

    
por 30.05.2013 / 06:45
0

De acordo com a documentação do Varnish, você pode usar o cabeçalho Cache-Control .

Cache-Control

The 'Cache-Control' header instructs caches how to handle the content. Varnish cares about the max-age parameter and uses it to calculate the TTL for an object.

So make sure you issue a 'Cache-Control' header with a max-age header. You can have a look at what Varnish Software's Drupal server issues:

$ GET -Used http://www.varnish-software.com/|grep ^Cache-Control
Cache-Control: public, max-age=600

link

    
por 19.08.2018 / 22:38