有人可以解释以下vcl代码。
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
if (req.http.Cookie) {
hash_data(req.http.Cookie);
}
}
我只使用hash_data函数作为缓存键来理解我的req.url的散列。下一个if else代码对我来说是模糊的。
请帮忙。日Thnx。
答案 0 :(得分:4)
hash_data
方法用于设置缓存对象的哈希值,换言之,密钥。此键用于将对象与缓存中已有的对象进行比较。
在您发布的代码中,考虑哈希的第一件事是请求页面的URL:req.url
。
但请注意,如果Varnish仅使用URL来对对象进行散列,那么它将过于模糊,并且可能导致将相同的缓存传递到不同的网站,例如 www.example.com/test_url 和< EM> www.example2.com/test_url
为了避免此问题,它会将主机(req.http.host
)添加到哈希(如果存在),如果不存在则会添加IP(server.ip
),例如{{1 }}
最后,它会检查Cookie是否存在,并将它们添加到哈希中。当页面显示基于cookie的不同内容时,即可完成此操作。