Caching hash_数据vcl_hash做什么?

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函数作

有人能解释一下下面的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.

使用
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所述,这是可能的,并且问题的配置已经为不同的站点准备好。感谢您的澄清。真的帮了我很多忙@本贾明鲍曼