我目前正致力于从varnish3到varnish4和的迁移项目 我正面临一种我不理解的行为。
简单地说,使用Varnish3中使用的相同配置文件 和Varnish4,我没有关于命中和未命中的相同结果。
这似乎与恩典属性有关,但我不知道如何 它有效。
以下是将问题详细描述的示例:
我的varnish3配置:
# ----------------------------------------------
backend default {
.host = "nginx";
.port = "80";
}
sub vcl_fetch {
set beresp.grace= 5s;
set beresp.ttl = 1s;
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
set resp.http.X-Cache-Hits = obj.hits;
}
# ----------------------------------------------
我的varnish4配置:(只有更改是方法名称 vcl_backend_response而不是vcl_fetch)
# ----------------------------------------------
vcl 4.0;
backend default {
.host = "nginx";
.port = "80";
}
sub vcl_backend_response {
set beresp.grace= 5s;
set beresp.ttl = 1s;
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
set resp.http.X-Cache-Hits = obj.hits;
}
# ----------------------------------------------
检索给定资源标头的小方案的结果 过了一段时间:
# ----------------------------------------------
Time 14-47-12
VARNISH4:
X-Cache: MISS
X-Cache-Hits: 0
VARNISH3:
X-Cache: MISS
X-Cache-Hits: 0
Time 14-47-13
VARNISH4:
X-Cache: HIT
X-Cache-Hits: 1
VARNISH3:
X-Cache: MISS
X-Cache-Hits: 0
Time 14-47-20
VARNISH4:
X-Cache: MISS
X-Cache-Hits: 0
VARNISH3:
X-Cache: MISS
X-Cache-Hits: 0
# ----------------------------------------------
因此,您可以在方案中看到第一个请求,包括v3和v4 返回MISS,这是正常的。 但是一秒钟之后,第二个请求返回了一个用于varnish3的MISS,其中 对我来说是正常的,对于varnish4来说是个HIT,我真的不明白。 我怀疑这与grace参数有关,我添加了一个 7秒后我的场景中的第三个请求(缓存超过1秒) 加上5秒的恩典),正如预期的那样,清漆3和清漆4 是MISS。
所以,如果有人可以帮助我理解/解决这个问题...... 我的目标是使用varnish4获得与使用相同的结果 varnish3(虽然我从3迁移到4;))。 我目前的解决方法是在varnish4上设置beresp.grace = 1ms,但我不知道 就像那样,我不能在每个配置上都这样做:(
非常感谢任何帮助!
提前致谢! :)
答案 0 :(得分:2)
Varnish 4在第二个请求中提供了陈旧的对象(请参阅How objects are stored)。
我建议您阅读Grace mode,然后使用Understanding Grace using varnishtest。