首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想使用varnish缓存410页

我想使用varnish缓存410页
EN

Stack Overflow用户
提问于 2019-08-06 23:08:58
回答 1查看 113关注 0票数 0

我正在为我的网站设置Varnish作为缓存服务器,我想使用Varnish缓存410个页面。我在backend_response.vcl文件中使用了以下配置,但没有获得缓存

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2019-08-15 06:04:59

默认情况下,清漆缓存410响应,其中包括see here

很可能你的410响应带有一些Set-Cookie/负Cache-Control,因此内置了VCL kicks in

代码语言:javascript
复制
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执行此操作,您将执行以下操作:

代码语言:javascript
复制
sub vcl_backend_response {
    if (beresp.status == 410) {
        if (beresp.ttl <= 0s) {
            set beresp.ttl = 60s;
        } 
        return (deliver);
    }
}

在此配置中,您将缓存其他无法缓存的410响应长达1分钟;而可缓存的410响应(TTL从Cache-Control派生)将在标头中指示的时间内缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57379054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档