您能否帮助我确认Varnish中vcl_recv的默认行为?
default.vcl文件中包含的vcl_recv定义在应用程序设置中被注释掉。
我们在vcl文件中提供了vcl_recv的自定义版本,而没有指定return(lookup)或lookup语句。但是,在尝试访问图像或静态内容时,缓存似乎是正确的。 Varnish 内部是否实现某种逻辑以在default.vcl的vcl_recv和用户定义的vcl_recv定义的内容之上进行缓存?
谢谢
最佳答案
说明
当您定义自定义 VCL(在本例中为 vcl_recv)时,Varnish 会自动将默认 VCL 附加到您的 VCL 中。
请记住,如果您在 VCL 中执行诸如 return(lookup)/pass/etc 之类的操作,则在执行该行后将不会执行 varnish 默认 VCL。
从Varnish docs:
It is executed right after any user-specified VCL, and is always present. You can not remove it.
和:
Consider either replicating all the logic in your own VCL, or letting Varnish fall through to the default VCL.
示例
sub vcl_recv {
if (req.http.host ~ "dev") {
return(pass);
}
}
这不会将任何在其主机中具有“dev”的请求保存在缓存中。但它仍然会在缓存中保存其他任何内容。
额外:
确定 Varnish 是否有效的好工具:Here
关于 Varnish vcl_recv的默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656953/