fko*_*sal 5 caching no-cache varnish
我在 Varnish 上缓存产品详细信息页面,然后在产品更新时从后端服务器清除缓存。我希望我的客户永远不要在他们这边缓存这个页面,而是总是向 Varnish 询问,这样我就可以为他们提供最新的副本。
目前,我有以下 vcl_backend_response 配置:
sub vcl_backend_response {
unset beresp.http.Set-Cookie;
#unset beresp.http.Cache-Control;
#set beresp.http.Cache-Control = "no-cache";
if (bereq.url ~ "^/products/\d+/details") {
set beresp.ttl = 1h;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,使用此配置,客户端将响应缓存 1 小时,并且不再询问,即使缓存已在 Varnish 上清除。
如果我取消注释缓存控制相关的行,这次 Varnish 不会缓存页面并且总是从后端服务器请求一个新的副本。
这可以在 Varnish v6.0 中实现吗?
是的,有可能:
\n\nvcl_backend_response.vcl_deliver。因此,可以指示客户端(浏览器)使用与 Varnish 不同的 TTL 进行缓存。以下内容将确保浏览器不会缓存响应:
\n\nsub vcl_deliver {\n set resp.http.Pragma = "no-cache";\n set resp.http.Expires = "-1";\n set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n此外,如果您可以修改您的应用程序,您可以采用第一个解决方案中概述的更精细的方法,即发送一个Cache-Control标头,该标头以不同的方式定义共享缓存(Varnish)和私有缓存(浏览器)的缓存 TTL:
Cache-Control: s-maxage=31536000, max-age=86400\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n上面的标头将指示浏览器缓存资源 86400 秒,而 Varnish 将缓存 31536000 秒。这是因为 s-maxage 仅适用于共享缓存。Varnish 会对其进行评估,而浏览器则不会\xe2\x80\x99t。
\n
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |