
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 via
cabeçalho apenas informa ao usuário que o Varnish é um servidor proxy na cadeia de resposta.
O valor do x-varnish
cabeçalho geralmente se refere ao ID da transação que administrou sua solicitação.
Na verdade, é o Age
cabeçalho que indica por quanto tempo uma resposta foi veiculada no cache.
Verificando os registros
O varnishncsa
comando 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 varnishncsa
produza uma resposta de linha única no formato NCSA, varnishlog
retornará a transação completa. Adicione a saída de varnishlog
à sua pergunta e eu o ajudarei a depurar.