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_urlwww.example2.com/test_url.

为了避免这个问题,如果主机 (req.http.host) 存在,它将添加到哈希中,如果不存在,它将添加 IP (server.ip),例如,http://192.168.0.1/test_url.

最后,它会检查 Cookie 是否存在,如果存在,也将它们添加到哈希中。这是在页面根据 cookie 显示不同内容时完成的。