当前位置: 首页 > 知识库问答 >
问题:

清漆缓存中的无限重定向循环

姜阳
2023-03-14

我们最近在Drupal前面加了清漆,因为服务器负载很重,我们总体上非常满意。

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

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

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

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

我希望听到一些想法,我们如何进一步跟踪这一点。很多提前感谢各种提示。

共有2个答案

雷骁
2023-03-14

@philip接受的答案更新为清漆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);
    }
}

}
广瑞
2023-03-14

我找到了一个解决方法:

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);
    }
  }
}

我给后端第二次(和第三次)机会返回正确的页面。如果该操作也失败,则删除位置标头。这是可行的,因为正确的页面只提供了一个额外的无效位置头。

 类似资料:
  • 我使用Drupal 7最新的开发版本。 我已经安装了清漆和过期模块并设置它们。它们工作得很好,但是我有一个关于从清漆中删除缓存的问题。 问题是如何只删除索引(主页)页面的清漆缓存,而不删除其他页面的缓存。我看了清漆日志,发现每次Drupal执行命令时,整个清漆缓存都被删除了 此命令由varnish模块或expire模块执行,它表示删除主页(索引)页的缓存。但正如我看到的,它正在删除varnish中

  • 这是身份服务器3独立实现第3部分由斯科特布雷迪 当我运行hybridflow客户端应用程序并登录时,会显示“同意”页面。但在我确认我对范围的选择并单击“是,允许”按钮后,页面重定向到同意页面。 这是网络日志映像。在此处输入图像描述 这是最终的Http请求URL,其响应是同意页面。 https://localhost:44302/core/connect/authorize?client_id=hy

  • 你好, 堆栈溢出的第一个帖子;) 我只是想了解一下清漆的制作过程。我还没有在网上找到我的问题的答案。 我有一个Drupal7网站,在开发中,它使用了清漆(v4),一切都很好。现在Drupal站点不生成cookie。 该网站将允许每个匿名用户管理一个“需求”(涉及多个页面),然后将该需求的内容发送到我们的后台办公室。没有针对匿名用户的用户管理或帐户管理。为了提高性能,我安装了清漆,但这是我第一次使用

  • 我需要实现喜欢/不喜欢功能(针对匿名用户,因此无需注册)。问题是内容是由清漆提供的,我需要显示喜欢的实际数量。 我想知道像stackoverflow这样的网站是怎么做到的。假设页面缓存在Varnish中(仅针对匿名用户),所以每次用户对答案/问题进行投票时,页面都需要从缓存中清除。我说得对吗?当前投票数需要对其他用户可见。 在这种情况下,什么是好方法?我是否应该在用户每次点击“喜欢”按钮时发送

  • 我有一个简单的php应用程序,它显示用户入职的表单。我使用SimpleSamlPhp作为SP,使用OKTA作为IDP。当我访问应用程序的url时,我会得到无限重定向。这些是我在OKTA中的设置: 我的应用程序的网址是:http://service.example.com/Analytics/ui/onboard.php。为回发网址,目标,收件人和受众限制设置了相同的网址 在SP端,我有以下代码:

  • 我正在使用Codeigniter在用户注销我的网站后重定向页面http://www.theindianclassified.com. 当用户转到网址http://www.theindianclassified.com/logout他被重定向到主页后,他被注销出系统。但是如果用户登录并且再次单击注销用户不是注销而是他被重定向到主页。我认为使用Codeigniter方法的重定向是由浏览器缓存的。 请帮