Como ignorar o cache de verniz com base em um cabeçalho específico

Como ignorar o cache de verniz com base em um cabeçalho específico

Estou trabalhando nisso há 2 dias, mas sem sorte.

Então, basicamente, quero ignorar o cache de verniz para um URL de solicitação de entrada específico.

Eu defini esta regra:

sub vcl_recv {
     if (req.url ~ "/en/reading-books/") { return(pass); }
}

Mas quando atualizo a página, ela ainda está sendo armazenada em cache, os cabeçalhos de resposta retornam estes:

via: 1.1 varnish-v4
x-varnish: 2

e este comando de execução em segundo plano produz a saída:

varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'

O que estou perdendo aqui? Qualquer indicação é muito apreciada.

Responder1

Atualize para uma versão compatível

Antes de falar sobre a depuração do cache desse URL de entrada, quero salientar quevocê está executando uma versão em fim de vida do Varnish que possui vulnerabilidades de segurança conhecidas.

Atualize para a versão mais recente ou use o Varnish Cache 6.0 LTS.

Verhttps://www.varnish-software.com/developers/tutorials/#installationspara obter uma lista de guias de instalação para uma variedade de distribuições Linux.

Correspondência de um URL exato ou de um padrão de URL

O código VCL que você compartilhou ignora o cache dos arquivos /en/reading-books. Você está tentando fazer uma correspondência exata nesse URL ou um padrão que corresponda a um conjunto de URLs?

Para uma correspondência exata, ajustaria o URL da seguinte maneira:

sub vcl_recv {
    if (req.url == "/en/reading-books/") { 
        return(pass); 
    }

}

Ao combinar vários URLs, todos começando com /en/reading-books/, eu ajustaria a VCL da seguinte maneira:

sub vcl_recv {
    if (req.url == "^/en/reading-books/.*$") { 
        return(pass); 
    }

}

E quanto aos cabeçalhos de resposta específicos do Varnish?

Você mencionou os seguintes cabeçalhos em sua pergunta:

via: 1.1 varnish-v4
x-varnish: 2

Isso indica que você está usando o Varnish, não necessariamente que o Varnish forneça a resposta do cache.

O viacabeçalho apenas informa ao usuário que o Varnish é um servidor proxy na cadeia de resposta.

O valor do x-varnishcabeçalho geralmente se refere ao ID da transação que administrou sua solicitação.

Na verdade, é o Agecabeçalho que indica por quanto tempo uma resposta foi veiculada no cache.

Verificando os registros

O varnishncsacomando tem acesso aos logs de memória compartilhada do Varnish, mas não exibe muitas informações úteis de cache.

O objetivo varnishncsaé retornar informações de log de acesso, semelhante ao que Apache e Nginx retornam.

Execute o seguinte comando para depurar o cache:

varnishlog -g request -q "ReqUrl ~ '^/en/reading-books/.*$'"

Embora varnishncsaproduza uma resposta de linha única no formato NCSA, varnishlogretornará a transação completa. Adicione a saída de varnishlogà sua pergunta e eu o ajudarei a depurar.

informação relacionada