varnish - Varnish的 `vcl_hash`的实现

标签 varnish varnish-vcl

据我了解, Varnish 的vcl配置文件只是C文件。我的新认识是, Varnish 的VCL文件是一种特定于领域的语言,与C有着许多相似之处。但是,我对现代C不熟悉,对我的穴居人大学C却很生疏,而且我不了解 Varnish 的C vcl_hash函数起作用。

具体来说,典型的vcl_hash函数将如下所示。

sub vcl_hash {
    hash_data(req.url);
    if (req.http.host) {
        hash_data(req.http.host);
    } else {
        hash_data(server.ip);
    }
    return (hash);
}
hash_data函数调用看起来很简单-我假设它在某种数据结构中添加了要考虑的缓存键所需的信息。

让我困惑的是最后的电话
return (hash);
vcl_hash返回什么?什么是(hash)?是功能吗?如果是这样,C如何在不带括号的情况下调用它(hash())?或者varnish在幕后做些聪明的事情?

最佳答案

VCL 中的 return 语句实际上是指“操作”。它有效地强制 Varnish 进入请求处理的下一阶段。从 return (hash) 本身返回 vcl_hash 实际上看起来很奇怪,因为通常你会从 vcl_recv 这样做来告诉它进入对象查找阶段。

通常 vcl_hash 是 return (lookup) 或什么都没有(用“内置”vcl_hash 来完成,它应用主机名和 url)。 “查找”将短路可能存在的任何其他 vcl_hash 实现并直接进入查找阶段。

关于varnish - Varnish的 `vcl_hash`的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32108111/

相关文章:

apache - 为 Varnish 配置更改 httpd 配置上的监听端口

REST API 缓存,我应该使用反向代理还是 memcache(d)?

amazon-web-services - ELB 保活超时 : Varnish Configuration Assistance

apache - 在 Varnish 中未设置 - 语法错误

apache - 具有自己的IP地址的基于 Varnish ,Apache和名称的虚拟主机

ruby-on-rails-3 - Varnish 导轨设计注销配置

nginx - Varnish 缓存-连接被拒绝

varnish-vcl - 取决于后端健康状况的清漆 4 宽限时间

caching - Varnish 连接错误

varnish - 如果更改了 Varnish 缓存中的缓存数据怎么办?