我正在为我的网站设置Varnish作为缓存服务器,我想使用Varnish缓存410个页面。我在backend_response.vcl文件中使用了以下配置,但没有获得缓存
if ( beresp.status == 410 ) {set beresp.ttl = 48h;}
if (beresp.ttl >= 0s) {
if (beresp.ttl > 48h) {
set beresp.ttl = 48h;
}}
else {
# set a default ttl
set beresp.ttl = 60s;}
if (beresp.status != 410 && beresp.status != 200 && beresp.status != 206 && beresp.status != 301 && beresp.status != 302 && beresp.status != 410) {
set beresp.ttl = 30s;
set beresp.uncacheable = true;
return (deliver);
}发布于 2019-08-15 06:04:59
默认情况下,清漆缓存410响应,其中包括see here。
很可能你的410响应带有一些Set-Cookie/负Cache-Control,因此内置了VCL kicks in
sub vcl_backend_response {
if (bereq.uncacheable) {
return (deliver);
} else if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Surrogate-control ~ "(?i)no-store" ||
(!beresp.http.Surrogate-Control &&
beresp.http.Cache-Control ~ "(?i:no-cache|no-store|private)") ||
beresp.http.Vary == "*") {
# Mark as "Hit-For-Miss" for the next 2 minutes
set beresp.ttl = 120s;
set beresp.uncacheable = true;
}
return (deliver);
}当您在代码中使用return (deliver);时,您将绕过内置VCL的执行,但是,只有在TTL为负的情况下才会这样做。因为它对你不起作用,这只意味着你的410响应发送的是负Cache-Control。
要在TTL为负的情况下强制执行缓存,并且仅对410执行此操作,您将执行以下操作:
sub vcl_backend_response {
if (beresp.status == 410) {
if (beresp.ttl <= 0s) {
set beresp.ttl = 60s;
}
return (deliver);
}
}在此配置中,您将缓存其他无法缓存的410响应长达1分钟;而可缓存的410响应(TTL从Cache-Control派生)将在标头中指示的时间内缓存。
https://stackoverflow.com/questions/57379054
复制相似问题