我们正在推出一个Varnish实现,看看是否适合坐在我们的Rails应用程序前面。
我们希望Varnish缓存API调用的结果,并且仅当客户端的ETag与Varnish中存储的ETag不匹配或客户端的修改日期在Varnish之前时才点击应用程序。
到目前为止,我还没有看到Varnish将这些值考虑在内。
当次要请求在最大年龄范围内时,我们只会获得缓存命中。
这是预期的行为吗?
答案 0 :(得分:0)
这是预期的行为,Varnish目前没有重新验证缓存的内容。
有一些实验性的工作要做你想要的,这可能会或者可能不会在Varnish 4.0中结束(几个月内)。
与此同时,你可以做的是设置一个人为的短TTL,并设置相当于你想要的TTL的grace
时间。使用该配置,当Varnish中的请求进入时,会向后端发送IMS请求(只要缓存的条目当然有ETag,否则它将是一个普通请求)。
副作用是如果后端关闭或返回500,Varnish也会发送缓存的条目 - 这可能是您想要的,也可能不是。
答案 1 :(得分:0)
我所做的是设置hash()函数以使用提供的etag。
这意味着对象的第一个请求(没有从客户端提供的etag)将获得对象本身。
任何后续请求或任何为etag提供标头的请求都将获得一个对象或304.