我目前正在做一个从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都会返回一个未命中,这是正常的。但是一秒钟后,第二个请求返回varnish3未命中,这对我来说很正常,而命中varnish4,我真的不太明白。因为我怀疑这与宽限参数有关,所以我在7秒后的场景中添加了第三个请求(缓存大于1秒,宽限为5秒),正如预期的那样,varnish 3和varnish 4都未命中。
所以如果有人能帮我理解/解决这个问题...我的目标是使用varnish4获得与varnish3相同的结果(当我从3迁移到4时;)。我目前的解决方法是在varnish4上设置beresp.grace=1ms,但我一点也不喜欢这样,而且我不能在我的每个配置上都这样做:(
任何帮助都将不胜感激!
提前感谢!:)
发布于 2017-11-02 20:23:01
Varnish4在第二个请求中提供了一个陈旧的对象(参见How objects are stored)。
我建议你阅读Grace mode,和Understanding Grace using varnishtest一起玩。
https://stackoverflow.com/questions/47073608
复制相似问题