如何检查Varnish缓存是否正常工作?

Lit*_*ski 12 wordpress caching nginx varnish varnish-vcl

我在Nginx上运行的Wordpress网站上使用Varnish Cache.它的配置方式与本博客中提到的方式相同.它工作正常,但我不确定它是否实际上是从缓存中提供内容.

如何确定?有人可以指导我.我是Varnish缓存的新手.

小智 18

默认情况下,Varnish会将标头添加到它处理的任何请求的响应中.您可以使用Firebug等浏览器工具或curlGET等CLI工具查看响应标头.这是一个GET示例:

sudo apt-get install libwww-perl && GET -Used http://localhost:6081/index.html
Run Code Online (Sandbox Code Playgroud)

要查找的两个标题是X-VarnishAge.X-Varnish中将包含一个或两个数字,数字本身并不重要,但它们指的是请求.如果请求导致未命中,则Varnish从后端获取页面,并且响应中的X-Varnish标头包含当前请求的一个数字:

X-Varnish: 107856168
Run Code Online (Sandbox Code Playgroud)

下次请求同一页面时,可能会导致命中.如果是这样,Varnish从缓存中提取页面,并添加原始请求中的数字:

X-Varnish: 107856170 107856168
Run Code Online (Sandbox Code Playgroud)

年龄头说缓存副本多少秒年纪.如果没有,它将为0,并且命中时它> 0.

请注意,后端可以设置年龄标题,使其看起来像一个错误的命中,堆叠的清漆可以在X-Varnish标题中产生错误的错误.为了确保在调试时你可以在VCL命中和未命中函数中添加自己的标题.有关说明,请参阅此页面https://www.varnish-software.com/static/book/VCL_functions.html.作为Varnish的新手,X-Varnish和Age标头很可能是您所需要的.


Ray*_*ngs 5

在 vcl 的各个点添加您自己的 X-header 是个好主意,这样您就可以对 vcl 的各种代码路径和条件进行单元测试。

例如,在 vcl_deliver 中:

sub vcl_deliver
{
    # Insert Diagnostic header to show Hit or Miss
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.X-Cache-Hits = obj.hits;
    }
    else {
        set resp.http.X-Cache = "MISS";
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)