如果Varnish在通过不匹配的ETag或更早的修改日期时命中?

时间:2012-11-21 14:45:17

标签: ruby-on-rails http caching reverse-proxy varnish

我们正在推出一个Varnish实现,看看是否适合坐在我们的Rails应用程序前面。

我们希望Varnish缓存API调用的结果,并且仅当客户端的ETag与Varnish中存储的ETag不匹配或客户端的修改日期在Varnish之前时才点击应用程序。

到目前为止,我还没有看到Varnish将这些值考虑在内。

当次要请求在最大年龄范围内时,我们只会获得缓存命中。

这是预期的行为吗?

2 个答案:

答案 0 :(得分:0)

这是预期的行为,Varnish目前没有重新验证缓存的内容。

有一些实验性的工作要做你想要的,这可能会或者可能不会在Varnish 4.0中结束(几个月内)。

与此同时,你可以做的是设置一个人为的短TTL,并设置相当于你想要的TTL的grace时间。使用该配置,当Varnish中的请求进入时,会向后端发送IMS请求(只要缓存的条目当然有ETag,否则它将是一个普通请求)。

副作用是如果后端关闭或返回500,Varnish也会发送缓存的条目 - 这可能是您想要的,也可能不是。

答案 1 :(得分:0)

我所做的是设置hash()函数以使用提供的etag。

这意味着对象的第一个请求(没有从客户端提供的etag)将获得对象本身。

任何后续请求或任何为etag提供标头的请求都将获得一个对象或304.