我们最近将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/