我们使用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;
}
..
}