我的理解是varnish的。我的新理解是,清漆的VCL文件是一种特定领域的语言,与C有许多相似之处。但是,我对现代C不熟悉,而且对我的洞穴人学院非常生疏C,我不明白varnish的vcl
配置文件只是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在幕后做一些聪明的事情?
答案 0 :(得分:1)
VCL中的return语句实际上是指“actions”。它有效地迫使Varnish进入请求处理的下一阶段。什么都不返回它return (hash)
本身对vcl_hash
来说实际上看起来很奇怪,因为通常你会从vcl_recv那样做,告诉它进入对象查找阶段。
通常vcl_hash会return (lookup)
或者根本没有(完成“内置”vcl_hash,它应用主机名和URL)。 “lookup”将使可能存在的任何其他vcl_hash实现短路并直接进入查找阶段。
答案 1 :(得分:0)
Hash是一个Varnish变量,来自varnish documentation:
用于引用缓存中对象的哈希键。两者都使用 读取和写入缓存。
请记住,您可以找到hash作为req.hash(req.hash适用于早于3.0的Varnish版本)
hash_data按照你的说法工作,更具体地说(再次来自varnish documentation):
hash_data(STR)
向哈希输入添加字符串。在default.vcl中,在请求的主机和URL上调用hash_data()。