2016-01-22 81 views
1

我试图使清漆工作与最后修改的标题,但无论我做什么我的页面在120s缓存,并且清漆永远不会与后端重新验证。光油4不尊重缓存控制:必须重新验证

我的后端在发送这些标题:

Cache-Control: must-revalidate, proxy-revalidate, public, stale-while-revalidate=0 
Last-Modified: Fri, 22 Jan 2016 03:32:33 GMT 

当我登录命中对象的TTL,它的价值总是被设置为120秒。

我使用默认VCL配置光油4.

祺,


编辑:一些搜索后,我发现,120秒是光油的缺省TTL值。但为什么他忽视最后修改?

回答

1

我从光油邮件列表的答案,以模拟“必须重新验证”头,这片VCL必须补充说:

sub vcl_backend_response { 
    if (beresp.http.cache-control ~ "must-revalidate") { 
     set beresp.ttl = 1s; 
     set beresp.grace = 0s; 
     set beresp.keep = 1w; 
    } 
} 

它仅适用于光油4

我引用了1秒的TTL的理由:

这样,你只1秒缓存(不设置为0,或所有 请求这个对象将顺序完成),但将保持 对象一个星期,重新验证它每次请求和 其ttl已过期。

+0

这是一个想法: 当'grace'设置为0并且'keep'为1周时,每个请求都会触发后端,并且必须等待来自后端的响应。除此之外,如果后端服务器关闭,则不会传送任何内容。 如果您将grace设置为1w而不是在宽限期内,则会立即回复请求,并且Varnish将从后端检索最新的信息以用于下一个请求。另外,如果后端服务器关闭,缓存的值仍然传递。 – Ronald

+0

原始响应似乎表明*每个*请求都必须重新生效(“proxy-revalidate”和“stale-while-revalidate = 0”),因此不允许发送缓存版本。 –