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

时间:2013-12-23 16:16:39

标签: wordpress caching nginx varnish varnish-vcl

我在Nginx上运行的Wordpress网站上使用Varnish Cache。它的配置方式与this blog中提到的方式相同。它工作正常,但我不确定它是否真的在缓存中提供内容。

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

3 个答案:

答案 0 :(得分:17)

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

sudo apt-get install libwww-perl && GET -Used http://localhost:6081/index.html

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

X-Varnish: 107856168

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

X-Varnish: 107856170 107856168

Age 标头显示缓存副本的秒数。如果没有,它将为0,并且点击它是> 0

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

答案 1 :(得分:2)

最好在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";
    }

    ...
}

答案 2 :(得分:0)

有几个很好的快速工具可以公开测试 varnish 是否正在缓存 - https://isvarnishworking.ukhttps://isvarnishworking.co.uk,我用来测试 varnish 是否在几个站点上工作。它们主要依赖 X-Varnish 和 X-Cache 标头,但会显示所有标头,因此您可以在 varnish vcl 中设置任何您想要的内容,并且您可以在网页上看到标头