varnish 是否可以将“Cache-Control:no-cache、no-store、must-revalidate”缓存控制响应发送给浏览器,而 varnish 缓存该响应。
场景是这样的。
- 后端发送缓存控制:Cache-Control: no-cache, no-store, must-revalidate
- Varnish 应该缓存响应。
- 浏览器不应该缓存内容,因此 varnish 对浏览器的响应应该显示“缓存控制:Cache-Control:no-cache,no-store,must-revalidate”
我曾尝试在 set beresp.http.Cache-Control 中使用 Cache-Control:no-cache、no-store、must-revalidate,但这导致 varnish 不缓存响应。
下面给出的是使用的 vcl_backend_response。
sub vcl_backend_response {
if (bereq.url == "/") {
unset beresp.http.expires;
unset beresp.http.set-cookie;
set beresp.ttl = 3600s;
set beresp.http.Cache-Control = "max-age=0";
if (beresp.status >= 400 && beresp.status <= 599) {
set beresp.ttl = 0s;
}
}
}
非常感谢您的帮助。
答案1
当然,在你的.vcl 配置文件中使用 vcl_deliver:
sub vcl_deliver {
set resp.http.Cache-Control = "no-cache, no-store, must-revalidate, private";
set resp.http.Pragma = "no-cache";
}