我看到 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 标头。