gpt4 book ai didi

caching - 为什么 Varnish 缓存 ESI 片段(当我告诉它不缓存时)?

转载 作者:行者123 更新时间:2023-12-03 17:45:34 24 4
gpt4 key购买 nike

我在使用 Varnish ESI 时遇到了一个奇怪的问题。

我网站上的每个页面都有一个 ESI 片段,用于输出(登录)用户的帐户信息。

看起来 Varnish 正在返回用户 session ESI 片段的缓存结果,除非浏览器发送 Cache-Control: no-cache/Pragma: no-cache(强制刷新),这是它从服务器请求 ESI 内容时。

我的 vcl_recv 包含绕过这个的规则:

if(req.url ~ "^/session-header") {
return(pass);
}

vcl_fetch 也有一个规则:
if(req.url ~ "^/session-header") {
return(hit_for_pass);
} else {
set beresp.ttl = 1h;
}

基本上,这是浏览器端的行为:

缓存控制:max-age=0 => Varnish 返回缓存的 ESI 片段

Cache-Control: no-cache/Pragma: no-cache => Varnish 从服务器获取 ESI 片段

我似乎无法弄清楚,我觉得我错过了一些相当明显的配置。

最佳答案

万一有人看到这个,找出问题所在。

原来后端正在设置 Etag,Varnish 用它来决定是否从服务器提供新的 ESI 片段(浏览器会在 If-None-Match 请求头中发送这个 Etag,除非它是强制刷新)。

我只是将这一行添加到 vcl_deliver 中,现在它就像一个魅力!

subl vcl_deliver {
...
unset resp.http.Etag;
...
}

关于caching - 为什么 Varnish 缓存 ESI 片段(当我告诉它不缓存时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597784/

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