hash_data vcl_hash有什么作用?

时间:2017-01-12 04:06:48

标签: 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函数作为缓存键来理解我的req.url的散列。下一个if else代码对我来说是模糊的。

请帮忙。日Thnx。

1 个答案:

答案 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的不同内容时,即可完成此操作。