据我了解, 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/