![我如何检查 Varnish 没有缓存响应的原因?](https://linux22.com/image/628614/%E6%88%91%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%20Varnish%20%E6%B2%A1%E6%9C%89%E7%BC%93%E5%AD%98%E5%93%8D%E5%BA%94%E7%9A%84%E5%8E%9F%E5%9B%A0%EF%BC%9F.png)
我看到 varnishstat 中的命中率一直为 0。有什么方法可以检查为什么特定请求没有从缓存中提供,或者为什么特定响应未被缓存的原因。
答案1
调整并将其添加到您的 vcl 中,在 sub vcl_fetch 中。大多数情况下,未命中是由于请求离开您的 vcl_recv 配置时请求中的 cookie 造成的。
# Section sets http return headers, for caching diagnosis
if (!beresp.ttl > 0s) {
set beresp.http.X-Cacheable = "NO:Not-Cacheable";
if (req.http.Cookie && req.http.Cookie ~ "wordpress_") { set beresp.http.X-Cacheable = "NO:Authed-user"; }
elseif (req.http.Cookie && req.http.Cookie ~ "PHPSESSID") { set beresp.http.X-Cacheable = "NO:PHP-SESS"; }
elseif (req.http.Cookie && req.http.Cookie ~ "vendor_re") { set beresp.http.X-Cacheable = "NO:vendor-region"; }
elseif (req.http.Cookie && req.http.Cookie ~ "themetype2") { set beresp.http.X-Cacheable = "NO:themetype2"; }
elseif (req.http.X-Requested-With == "XMLHttpRequest") { set beresp.http.X-Cacheable = "NO:Ajax"; }
return(hit_for_pass);
}
您可能需要对此进行调整。但是,您可以在站点中看到这些 X-Cacheable 标头。