gpt4 book ai didi

caching - 如何在 Varnish 上缓存对象,但告诉客户端不要缓存它

转载 作者:行者123 更新时间:2023-12-01 03:09:20 25 4
gpt4 key购买 nike

我在 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;
}
}

但是,使用这个配置,客户端将响应缓存 1 小时,并且不再询问,甚至缓存在 Varnish 上被清除。

如果我取消注释缓存控制相关的行,这一次 Varnish 不会缓存页面并且总是从后端服务器请求一个新的副本。

这在 Varnish v6.0 中可以实现吗?

最佳答案

是的,有可能:

  • vcl_backend_response 中定义 Varnish 缓存多长时间的逻辑。 .
  • 定义vcl_deliver中的浏览器缓存缓存多长时间的逻辑.

  • 因此可以指示客户端(浏览器)使用与 Varnish 不同的 TTL 进行缓存。以下将确保浏览器不会缓存响应:

    sub vcl_deliver {
    set resp.http.Pragma = "no-cache";
    set resp.http.Expires = "-1";
    set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
    }

    此外,如果您可以修改您的应用程序,您可以采用第一个解决方案 here 中概述的更精细的方法。 ,即发送单个 Cache-Control header 以不同方式定义共享缓存(Varnish)和私有(private)缓存(浏览器)的缓存 TTL:
    Cache-Control: s-maxage=31536000, max-age=86400

    The header above will instruct a browser to cache resource for 86400 seconds, while Varnish will cache for 31536000. This is because s-maxage only applies to shared caches. Varnish evaluates it, while browsers don’t.

    关于caching - 如何在 Varnish 上缓存对象,但告诉客户端不要缓存它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643752/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com