使用清漆从 Cache-Control header 中删除 s-maxage
Remove s-maxage from Cache-Control header using Varnish
我们目前在 Cache-Control header 中使用 s-maxage
指令来控制 Varnish 中的 TTL。但是,我想在传递之前将其从响应中删除,以便请求链中的其他缓存不会对其起作用。
我目前正在查看 header VMOD,以从 header 中删除 s-maxage
,但保持其余部分不变。我相信这可以通过这样的方式实现:
sub vcl_deliver {
header.regsub(resp, "s-maxage=[0-9]+,?\s?", "")
}
作为 Varnish 的新手,我想 sanity-check 这种方法并确保没有更好的方法来解决它?
感谢任何支持或建议。
交货时更换header
下面的 VCL 片段将在 Cache-Control
header 发送到客户端之前从 s-maxage
属性中剥离。
sub vcl_deliver {
set resp.http.cache-control = regsub(resp.http.cache-control,
"(,\s*s-maxage=[0-9]+\s*$)|(\s*s-maxage=[0-9]+\s*,)","");
}
存储时替换header
也可以在 Cache-Control
header 将此属性存储到缓存 object 之前将其剥离。在这种情况下,您将在 vcl_backend_response
.
中使用 beresp.http.cache-control
变量
sub vcl_backend_response {
set beresp.http.cache-control = regsub(beresp.http.cache-control,
"(,\s*s-maxage=[0-9]+\s*$)|(\s*s-maxage=[0-9]+\s*,)","");
}
使用vmod_headerplus
如果您正在使用 Varnish Enterprise,您可以使用 vmod_headerplus
模块轻松删除 header 属性:
vcl 4.1;
import headerplus;
sub vcl_deliver {
headerplus.init(resp);
headerplus.attr_delete("Cache-Control","s-maxage",",");
headerplus.write();
}
vcl 4.1;
import headerplus;
sub vcl_backend_response {
headerplus.init(beresp);
headerplus.attr_delete("Cache-Control","s-maxage",",");
headerplus.write();
}
尽管 Varnish Enterprise 是 Varnish Cache 的商业版本,但如果您在AWS、Azure 或 GCP。
我们目前在 Cache-Control header 中使用 s-maxage
指令来控制 Varnish 中的 TTL。但是,我想在传递之前将其从响应中删除,以便请求链中的其他缓存不会对其起作用。
我目前正在查看 header VMOD,以从 header 中删除 s-maxage
,但保持其余部分不变。我相信这可以通过这样的方式实现:
sub vcl_deliver {
header.regsub(resp, "s-maxage=[0-9]+,?\s?", "")
}
作为 Varnish 的新手,我想 sanity-check 这种方法并确保没有更好的方法来解决它?
感谢任何支持或建议。
交货时更换header
下面的 VCL 片段将在 Cache-Control
header 发送到客户端之前从 s-maxage
属性中剥离。
sub vcl_deliver {
set resp.http.cache-control = regsub(resp.http.cache-control,
"(,\s*s-maxage=[0-9]+\s*$)|(\s*s-maxage=[0-9]+\s*,)","");
}
存储时替换header
也可以在 Cache-Control
header 将此属性存储到缓存 object 之前将其剥离。在这种情况下,您将在 vcl_backend_response
.
beresp.http.cache-control
变量
sub vcl_backend_response {
set beresp.http.cache-control = regsub(beresp.http.cache-control,
"(,\s*s-maxage=[0-9]+\s*$)|(\s*s-maxage=[0-9]+\s*,)","");
}
使用vmod_headerplus
如果您正在使用 Varnish Enterprise,您可以使用 vmod_headerplus
模块轻松删除 header 属性:
vcl 4.1;
import headerplus;
sub vcl_deliver {
headerplus.init(resp);
headerplus.attr_delete("Cache-Control","s-maxage",",");
headerplus.write();
}
vcl 4.1;
import headerplus;
sub vcl_backend_response {
headerplus.init(beresp);
headerplus.attr_delete("Cache-Control","s-maxage",",");
headerplus.write();
}
尽管 Varnish Enterprise 是 Varnish Cache 的商业版本,但如果您在AWS、Azure 或 GCP。