1

我们最近将 Varnish 放在了 Drupal 前面,因为服务器负载很重,总的来说我们很高兴。

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

我们不太确定是什么导致了这种情况,但也不知道如何追踪它。当然,处理这个问题的最好方法是在 drupal 方面,但我们无法真正说出为什么会发生这种情况。

发生这种情况时,有没有办法记录案例?或者是否可以在清漆中检测到这一点并将当前缓存内容标记为无效?

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

我希望听到一些想法,我们可以如何进一步追踪这一点。许多人提前感谢各种提示。

4

2 回答 2

2

我找到了解决方法:

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 标头将被删除。这是可行的,因为正确的页面只提供了一个额外的无效 Location 标头。

于 2012-06-12T07:44:16.663 回答
0

@philip 接受的答案为 Varnish 4 更新:

sub vcl_backend_response {

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

}
于 2019-10-31T20:37:09.067 回答