Varnish 301重定向显示白页

时间:2011-10-29 08:10:32

标签: php redirect http-status-code-301 varnish

我们使用清漆作为我们的负载均衡器(除此之外),但我们现在有一些奇怪的行为。

我们有一个使用一些参数调用的脚本,并且根据您传递的parmas,您将使用301重定向重定向到不同的位置(这是使用php脚本和header()函数完成的)

问题是,第一次开始调用URL时会发生301重定向,但是下次调用相同的URL时,您将获得200 OK状态,不会发生重定向,只显示白页。

我在php脚本的顶部添加了一个session_start()来尝试阻止varnish缓存页面,但到目前为止没有任何帮助。

我已就此问题做了一些研究,发现有几个人遇到了同样的问题,但我还是找不到解决方案。

我如何获得清除缓存页面的清漆?
任何正确方向的帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

你能否从varnish缓存中排除这个url?

将以下内容添加到default.vcl(或调用任何varnish配置文件)。

sub vcl_recv {
    if(req.url ~"^/thatpagethatredirects") {
        return (pass);
    }
}

这应该停止清理缓存该URL。

答案 1 :(得分:0)

你可以尝试找到varnish重定向的url并添加一个带有随机生成的数字的查询字符串。

示例:

<?php
$random_number = rand(10000, 99999999);
// This is what the redirect code MIGHT look like, but I doubt it.
header("Location: http://www.example.com/index.php?cache=$random_number");
?>

如果您可以找到页面实际进行重定向的位置并添加随机数查询字符串,则应该修复问题。我已经使用过这种方法来确保图像在过去没有被缓存,它总是对我有用。

哦,如果你找不到清漆正在使用的重定向代码。您可以尝试将此添加到301重定向后加载清漆的页面:

<?php
$random_number = rand(10000, 99999999);
header("Location: NAME_OF_THIS_SCRIPT.php?cache=$random_number");
?>

几乎相同的想法,只涉及更少的狩猎。我不确定这是否会破坏清漆的负载平衡功能。

答案 2 :(得分:0)

这是相当尴尬的,默认情况下应该可以正常工作。你能告诉我们你正在使用什么版本的Varnish以及你是否创建了一个自定义vcl文件?

该错误可能是在vcl_fetch中引入的。这应该通过以下检查来检查可缓存性:

sub vcl_fetch {
  ...
  if (req.status >= 300 ) {
    return pass;
  }

  if ( ! obj.cacheable ) {
    return pass;
  }
  ..
}