Varnish 不一致地从缓存中驱逐页面

Varnish 不一致地从缓存中驱逐页面

在我们的 varnish 配置中我们有一个 vcl_fetch 函数定义如下:

if (beresp.ttl > 0s) {
   /* Remove Expires from backend, it's not long enough */
   unset beresp.http.expires;

   /* Set the clients TTL on this object */
   set beresp.http.cache-control = "max-age=900";

   /* Set how long Varnish will keep it */
   set beresp.ttl = 1h;

   /* marker for vcl_deliver to reset Age: */
   set beresp.http.magicmarker = "1";
 }

然后在vcl_deliver中:

if (resp.http.magicmarker) {
   /* Remove the magic marker */
   unset resp.http.magicmarker;

   /* By definition we have a fresh object */
   set resp.http.age = "0";
}

问题是,如果我设置一个脚本(shell 脚本或 php 脚本)来访问同一个 URL,我首先会看到 MISS,然后是 HIT(到目前为止一切正常)。

我期望的是,在 1 小时过去之前,会反复点击,在 1 小时时会错过一次,然后再次点击一小时。换句话说,因为我反复点击同一个 URL,所以它应该每 1 小时在点击和错过之间循环一次。

我看到的是这样的:

 6/20/2013 6:30:05 - STRING HIT NOT FOUND
 6/20/2013 10:32:11 - STRING HIT NOT FOUND
 6/21/2013 12:33:06 - STRING HIT NOT FOUND
 6/21/2013 2:34:06 - STRING HIT NOT FOUND

现在是凌晨 5:57(距离未找到 HIT 已过去近 4 个小时)。

上述缓存未命中确实都出现在半小时左右,但它们相隔 4 小时、2 小时和 2 小时,并且 TTL 设置为 1 小时。

所以我不明白为什么对象被保留超过 1 小时,以及为什么它会以看似随机的间隔被驱逐。我如何才能更好地确定发生了什么?

顺便说一下,我正在使用清漆 3,如果有帮助的话。

答案1

因此,有问题的 varnish 服务器正在缓存 Drupal 7 站点。在 Drupal 7 站点中,我们配置并启用了 Drupal Varnish 模块。

据我所知,这是定期清除缓存。我能够使用以下命令确定这一点,并查看我未发布的 BAN:

varnishadm -T localhost:6082 -S /etc/varnish/secret ban.list 
Present bans: 1371834738.031740 193 req.http.host ~ www.ourdomain.com && req.url ~ /

相关内容