更改 Varnish 中陈旧响应的缓存控制指令
Change cache control directive for stale responses in Varnish
这是我第一次尝试 Varnish。
我们注意到我们的 CDN 没有进行任何请求合并,因此作为实验,我可以试用 Varnish。
但是,当提供陈旧的内容时,我似乎无法弄清楚如何修改响应 headers。
图像如下 vcl
并且所有后端响应都将 max-age=60, public, s-maxage=600
作为 cache-control 指令。
sub vcl_backend_response {
set beresp.grace = 3600s;
return (deliver);
}
当我:
- 访问
/foo
- 在
/foo
上执行清漆软清除和后续 CDN(硬)清除
- 再次访问
/foo
第二次访问 /foo
时,我会立即收到(陈旧的)回复。但是,我不希望它再具有相同的 cache-control 指令,因为那样我的 CDN 将继续为这个陈旧的响应提供另外 10 分钟的服务。
是否可以将陈旧内容的 cache-control 指令更改为 max-age=0, public, s-maxage=10
?
这是您需要修改 Cache-Control
header 以获取陈旧内容的 VCL 代码:
vcl 4.1;
sub vcl_deliver {
//set resp.http.x-ttl = obj.ttl;
//set resp.http.x-grace = obj.grace;
if(obj.ttl <= 0s && obj.grace > 0s ) {
set resp.http.Cache-Control = "max-age=0, public, s-maxage=10";
}
}
If you want to debug the process, just uncomment the 2 lines and look for the x-ttl
and x-grace
response headers to see the remaining values for both timers.
虽然您可以通过在 VCL 中设置 beresp.grace
来控制陈旧性,但您也可以通过 Cache-Control
header 中的 stale-while-revalidate
指令来设置陈旧性。
这是一个例子:
Cache-Control: max-age=60, public, s-maxage=600, stale-while-revalidate=3600
这将允许浏览器缓存 1 分钟,允许中间服务器缓存 10 分钟,并在重新验证过时内容时设置允许的 1 小时陈旧时间。
这是我第一次尝试 Varnish。
我们注意到我们的 CDN 没有进行任何请求合并,因此作为实验,我可以试用 Varnish。
但是,当提供陈旧的内容时,我似乎无法弄清楚如何修改响应 headers。
图像如下 vcl
并且所有后端响应都将 max-age=60, public, s-maxage=600
作为 cache-control 指令。
sub vcl_backend_response {
set beresp.grace = 3600s;
return (deliver);
}
当我:
- 访问
/foo
- 在
/foo
上执行清漆软清除和后续 CDN(硬)清除
- 再次访问
/foo
第二次访问 /foo
时,我会立即收到(陈旧的)回复。但是,我不希望它再具有相同的 cache-control 指令,因为那样我的 CDN 将继续为这个陈旧的响应提供另外 10 分钟的服务。
是否可以将陈旧内容的 cache-control 指令更改为 max-age=0, public, s-maxage=10
?
这是您需要修改 Cache-Control
header 以获取陈旧内容的 VCL 代码:
vcl 4.1;
sub vcl_deliver {
//set resp.http.x-ttl = obj.ttl;
//set resp.http.x-grace = obj.grace;
if(obj.ttl <= 0s && obj.grace > 0s ) {
set resp.http.Cache-Control = "max-age=0, public, s-maxage=10";
}
}
If you want to debug the process, just uncomment the 2 lines and look for the
x-ttl
andx-grace
response headers to see the remaining values for both timers.
虽然您可以通过在 VCL 中设置 beresp.grace
来控制陈旧性,但您也可以通过 Cache-Control
header 中的 stale-while-revalidate
指令来设置陈旧性。
这是一个例子:
Cache-Control: max-age=60, public, s-maxage=600, stale-while-revalidate=3600
这将允许浏览器缓存 1 分钟,允许中间服务器缓存 10 分钟,并在重新验证过时内容时设置允许的 1 小时陈旧时间。