hash_data vcl_hash 有什么作用?
What does hash_data vcl_hash does?
谁能解释一下下面的 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);
}
}
我只理解 req.url 使用 hash_data 函数作为缓存键的散列。下一个 if else 代码对我来说是模糊的。
请帮忙。谢谢。
hash_data
方法用于设置缓存对象的散列,换句话说就是键。此键用于将对象与缓存中已有的对象进行比较。
在您的代码中,您 post 首先考虑的散列是所请求页面的 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
.
最后,它会检查 Cookie 是否存在,如果存在,也将它们添加到哈希中。这是在页面根据 cookie 显示不同内容时完成的。
谁能解释一下下面的 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);
}
}
我只理解 req.url 使用 hash_data 函数作为缓存键的散列。下一个 if else 代码对我来说是模糊的。
请帮忙。谢谢。
hash_data
方法用于设置缓存对象的散列,换句话说就是键。此键用于将对象与缓存中已有的对象进行比较。
在您的代码中,您 post 首先考虑的散列是所请求页面的 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
.
最后,它会检查 Cookie 是否存在,如果存在,也将它们添加到哈希中。这是在页面根据 cookie 显示不同内容时完成的。