varnish - Varnish 缓存中的无限重定向循环

标签 varnish varnish-vcl

我们最近将Varnish放在了Drupal的前面,因为服务器承受着沉重的负担,总体而言,我们感到非常满意。

剩下的唯一问题是,有时我们在缓存的数据中会有一个无限的重定向循环。我们通过HTTP监控发现了这一点。我们每分钟检查一次首页。缓存中的页面有时包含完整的首页,但是设置了Location header ,将用户再次发送到首页。

我们不太确定是什么原因造成的,但是也没有任何线索可以找到原因。当然,处理此问题的最佳方法是在drupal方面,但是我们无法真正说出为什么会发生这种情况。

有没有一种方法可以记录这种情况下的情况?还是有可能在 Varnish 中检测到这种情况并将当前缓存内容标记为无效?

当然,我们不希望总是将故意重定向传递到原始服务器,而是那些会导致无限循环的重定向。

我希望听到一些想法,我们将如何进一步对此进行追踪。许多人在此先感谢各种提示。

最佳答案

我已经找到了解决方法:

sub vcl_fetch {
  // Fix a strange problem: HTTP 301 redirects to the same page sometimes go in$
  if (beresp.http.Location == "http://" + req.http.host + req.url) {
    if (req.restarts > 2) {
      unset beresp.http.Location;
      #set beresp.http.X-Restarts = req.restarts;
    } else {
      return (restart);
    }
  }
}

我给后端第二次(和第三次)机会来返回正确的页面。如果同样失败,则会删除Location header 。之所以可行,是因为正确的页面仅带有附加的无效Location header 。

关于varnish - Varnish 缓存中的无限重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10915731/

相关文章:

php - ESI 是阻塞的还是非阻塞的?

caching - 带有 json 内容类型的 Varnish 缓存未命中

Varnish 正则表达式或 if (bereq.url ~ "

apache - Varnish Cache - 网页的初始缓存

caching - 是否可以根据 Varnish 中后端响应的大小来阻止缓存?

nginx - Varnish /Nginx : initial connection after idle for ~5 seconds

java - 限制 Varnish 客户端等待时间,而不是后端时间

Magento设置了一个不缓存的 header ,这样Varnish不会缓存吗?

varnish - Varnish 默认缓存 404s 吗?

wordpress - Varnish 不缓存wordpress网站。尝试了博客中存在的一些解决方案。没什么对我有用