我如何检查 Varnish 没有缓存响应的原因?

我如何检查 Varnish 没有缓存响应的原因?

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

相关内容