自 2 天前以来我一直在研究这个,但没有运气。
所以,基本上,我想绕过特定传入请求 URL 的清漆缓存。
我已经定义了这个规则:
sub vcl_recv {
if (req.url ~ "/en/reading-books/") { return(pass); }
}
但是当我刷新页面时,它仍然被缓存,响应头返回这些:
via: 1.1 varnish-v4
x-varnish: 2
这个后台运行的命令产生输出:
varnishncsa -F '%{Host}i %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"'
我在这里错过了什么?非常感谢任何指点。
升级到受支持的版本
在我谈论调试传入 URL 的缓存之前,我想指出您正在运行具有已知安全漏洞的 Varnish 的生命周期结束版本。
请升级到最新版本或使用 Varnish Cache 6.0 LTS。
有关各种 Linux 发行版的安装指南列表,请参阅https://www.varnish-software.com/developers/tutorials/#installations 。
匹配确切的 URL 或 URL 模式
您共享的 VCL 代码绕过了
/en/reading-books
. 您是要对该 URL 进行精确匹配还是要匹配一组 URL 的模式?对于完全匹配,我将按如下方式调整 URL:
当您匹配多个 URL 时,所有这些 URL 都以 开头
/en/reading-books/
,我将按如下方式调整 VCL:Varnish 特定的响应标头怎么样
您在问题中提到了以下标题:
这些表明您正在使用 Varnish,不一定是 Varnish 服务于来自缓存的响应。
标
via
头只是告知用户 Varnish 是响应链中的代理服务器这一事实。标头的值
x-varnish
通常是指处理您的请求的事务的 ID。它实际上是
Age
标头,指示响应从缓存中提供了多长时间。检查日志
该
varnishncsa
命令可以访问 Varnish 共享内存日志,但实际上并没有显示很多有用的缓存信息。目的
varnishncsa
是返回访问日志信息,类似于Apache&Nginx的返回。请运行以下命令来调试缓存:
在
varnishncsa
生成 NCSA 格式的单行响应时,varnishlog
将返回完整的事务。请将输出添加varnishlog
到您的问题中,我将帮助您进行调试。