Varnish 301重定向显示一个白页面


Varnish 301 redirect displays a white page

我们使用varnish作为我们的负载均衡器(以及其他东西),但是我们现在得到一些奇怪的行为。

我们有一个脚本,调用一些参数,并根据你传递什么帕尔马,你得到重定向到一个不同的位置使用301重定向(这是完成与php脚本和header()函数)

问题是,第一次开始一个URL称为301重定向发生,但然后下一次调用相同的URL,你得到一个状态200 OK,没有重定向发生,只是一个白页面显示。

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

我对这个问题做了一些研究,看到很多人都遇到了同样的问题,但我还没能找到解决方案。

我如何得到清漆停止缓存页面?
任何在正确方向上的帮助都会很感激。

是否可以从清漆缓存中排除该url ?

在默认值中添加如下内容。VCL(或任何您的清漆配置文件的名称)。

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

您可以尝试查找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");
?>
如果您可以找到页面实际进行重定向的位置,并且添加随机数查询字符串,则应该修复问题。我曾经用过这种方法来确保图像不被缓存,它总是对我很有效。

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

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

基本相同的想法,只是需要更少的搜索。我不确定这是否会破坏清漆的负载平衡功能。

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

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

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