Caching hash_数据vcl_hash做什么?
有人能解释一下下面的vcl代码吗Caching hash_数据vcl_hash做什么?,caching,varnish,varnish-vcl,Caching,Varnish,Varnish Vcl,有人能解释一下下面的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函数作
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.使用
hash\u data
方法来设置缓存对象的哈希,换句话说就是键。此键用于将对象与缓存中已有的对象进行比较
在您发布的代码中,哈希首先考虑的是所请求页面的URL:req.URL
但请注意,如果Varnish仅使用URL对对象进行哈希运算,这将过于模糊,并可能导致相同的缓存被传递到不同的站点,如www.example.com/test_URL和www.example2.com/test_URL
为了避免此问题,如果主机(req.http.host
)存在,它会将其添加到哈希中,如果不存在,它会将IP(server.IP
)添加到哈希中,例如,http://192.168.0.1/test_url
最后,它将检查Cookies是否存在,如果存在,也将它们添加到哈希中。当页面显示基于cookies的不同内容时,就会执行此操作。在您的评论的第3段中。是否可以对不同的站点使用单个varnish?当然varnish是反向代理,它会接收请求并将它们发送到不同的服务器/站点。@JohnRoca,如Benjamin所述,这是可能的,并且问题的配置已经为不同的站点准备好。感谢您的澄清。真的帮了我很多忙@本贾明鲍曼