请告诉我,这些概念之间的区别是什么?我没有在Varnish的文件中找到任何答案。他们只是操作这些概念,仅此而已。
什么更适合用于缓存:缓存控制头中的beresp.ttl或max-age?
如果你可以用很少的例子来做 - 请这样做:)
答案 0 :(得分:9)
req:请求值一到达Varnish就会显示。
bereq:发送到后端的请求。 req 中的所有变量都会自动分配给 bereq 。但是,这些值可能略有不同,因为Varnish可能会修改客户端请求。例如,来自客户端的HEAD请求可能会转换为后端的GET请求。
beresp:后端等待。 beresp 中的任何更改都会影响 resp 和 obj ,它们是缓存的对象。 提示: 如果您想要获取对象的任何其他信息,请将其设置为 beresp 。
resp:传递给客户端的响应。所有 beresp 值都会传递给 resp 。
在所有名称解释之后,基本的结论是 req.ttl 是从请求中收到的TTL,除非您以不同的方式配置它,否则它没有任何意义。 beresp.ttl 是要设置对象TTL的那个。
关于什么是最适合缓存的,Varnish已经获得了max-age并将其设置为beresp.ttl。所以最后没有区别。使用它的难点在于,某些Web应用程序不会正确处理 max-age ,并最终总是发送nocache
导致Varnish不进行任何缓存。在这些情况下,你应该忽略beresp.http.cache-control中的内容并设置你自己的TTL。
答案 1 :(得分:0)
您可以从这里获得有关 vcl 对象的详细概述
https://varnish-cache.org/docs/6.6/users-guide/vcl-variables.html