【问题标题】:How to check if Varnish cache is working correctly?如何检查 Varnish 缓存是否正常工作?
【发布时间】:2014-01-11 21:19:39
【问题描述】:

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

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

【问题讨论】:

  • 查看响应标头,它们会告诉您 Varnish 是否正常工作以及请求是否来自其缓存。
  • 请勿使用 isvarnishworking.com - 即使一切正常,它大部分时间都显示“Nope”。此外,wget、wbox 或开发者工具显示的标题与本网站显示的不同。这是一个非常具有误导性的工具。

标签: varnish


【解决方案1】:

要验证 Varnish 是否正在代理,请在响应中查找 X-Varnish 标头。 Age 标头在缓存未命中时将是 0,在命中时将高于零。对页面的第一个请求总是会丢失。

带有-v 标志的curl 可用于显示标题。使用 bash 中的 curl:

curl -v http://localhost:8080

缓存命中的示例输出:

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/x.xx.x
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Server: nginx/1.20.0
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< Content-Length: 45703
< X-Varnish: 32770 3
< Age: 6
< Via: 1.1 varnish (Varnish/7.0)
< Accept-Ranges: bytes
< Connection: keep-alive
<
<!DOCTYPE html>
...

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      最好在 vcl 的各个点添加您自己的 X-headers,以便您可以对 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";
          }
      
          ...
      }
      

      【讨论】:

      • 我尝试了这段代码,我的在标题中显示了 X-Cache MISS。所以这意味着我的清漆不工作?但是当我停止服务清漆时,我的网站就关闭了。所以清漆以某种方式工作,但没有缓存。有什么建议?谢谢
      • 如果你只有一个清漆服务器,没有负载均衡器,那么重试一次后,你应该在标题 X-Cache 中有“HIT”。
      【解决方案4】:

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

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

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

      X-Varnish: 107856168
      

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

      X-Varnish: 107856170 107856168
      

      Age 标头表示缓存副本存在多少秒。未命中为 0,命中为 > 0。

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

      【讨论】:

      • 感谢您的回答。 centos 呢?
      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 2013-08-10
      • 2014-02-20
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      相关资源
      最近更新 更多