我正在尝试调整我的 varnish 缓存服务器,以便能够缓存带有某些特定 cookie 的页面。
但是我发现很难看出页面是否真的被缓存了。我知道在 varnish 中我无法列出所有缓存的 URL,但是否可以实时显示来自后端的页面是否被缓存?甚至
更多 - 如果它们没有被缓存,可能有办法找出原因?
因为说实话,很难相信如此复杂的解决方案会以这样的方式工作:您只需配置一些东西,然后“希望”它会缓存页面,但您没有真正的方法来检查它们是否被缓存,以及(最重要的是)为什么决定不缓存页面?然后,如果页面没有被缓存,那么您不知道原因,而找出原因的唯一方法是猜测和更改配置中的随机内容,并检查它是否会以某种方式改变缓存行为?
我想我可以监控后端请求,如果尽管打开了某个 URL 但不再有请求,那么该页面就会被缓存,但这实际上只是猜测,而不是真正确定 Varnish 缓存中页面的状态和状况的方法。
答案1
您可以通过查看 HTTP 标头来检查 Varnish 是否缓存页面X-Varnish
。您可以通过浏览器或命令行来检查标头。
通过浏览器检查 HTTP 标头(例如 Chrome)
- 右键单击页面上的任意位置并选择“检查”,打开 Chrome 开发者控制台
- 前往“网络”选项卡。从那里选择“文档”并重新加载相关页面
- 在右侧,您将看到当前请求的响应标头。您将在那里找到
X-Varnish
其中一个标头。
通过命令行检查 HTTP 标头
要通过命令行进行检查,常用工具是curl
。您可以运行,例如,curl -IL <URL>
这将很好地在终端中显示响应标头。但是,除非您构建了所有必需的请求标头,否则这可能会提供不相关的结果。
如何解读X-Varnish的价值
如果有两个数字,则表示请求来自缓存。如果有一个数字,则表示请求来自后端。
检查请求未缓存的原因
... 最直接的方法就是修改 VCL,使其发出自定义标头,说明请求绕过缓存的原因。