【问题标题】:What does hash_data vcl_hash does?hash_data vcl_hash 有什么作用?
【发布时间】:2017-05-27 01:48:09
【问题描述】:

谁能解释一下下面的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 代码对我来说是模糊的。

请帮忙。谢谢。

【问题讨论】:

    标签: caching varnish varnish-vcl


    【解决方案1】:

    hash_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

    最后,它会检查 Cookie 是否存在,如果存在,也会将它们添加到哈希中。当页面根据 cookie 显示不同的内容时,就会执行此操作。

    【讨论】:

    • 在您评论的第 3 段中。是否可以在不同的网站上使用单一的清漆?
    • Sure varnish 是一个反向代理,它接收请求并将它们分派到不同的服务器/站点。
    • @JohnRoca ,正如本杰明所说,这是可能的,并且问题的配置已经为不同的站点准备好了。
    • 感谢您的澄清。真的帮了我很多。 @BenjaminBaumann
    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2023-04-10
    • 2011-07-17
    • 2014-09-13
    • 2011-12-30
    • 2017-04-25
    相关资源
    最近更新 更多