AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1132160
Accepted
Morteza
Morteza
Asked: 2023-05-29 23:52:46 +0800 CST2023-05-29 23:52:46 +0800 CST 2023-05-29 23:52:46 +0800 CST

这段清漆代码有什么作用?

  • 772

我在清漆配置中有这段代码,但不确定它的作用!此配置是否会缓存我的客户端请求?有什么问题吗?

sub vcl_backend_response {
    if (beresp.status != 200) {
        return (pass);
    }
    set beresp.http.X-Backend = beresp.backend.name;


    unset beresp.http.cookie;
    unset beresp.http.Set-Cookie;

    if (bereq.http.x-render-type == "test" && beresp.http.Content-Type ~ "text/html") {
        set beresp.http.Cache-Control = "no-store";
    }

    set beresp.http.Cache-Control = "no-store";
    if (bereq.http.x-render-type == "test" && beresp.http.Content-Type ~ "text/html") {
        return (pass);
    }

    return (deliver);
}
cache
  • 1 1 个回答
  • 75 Views

1 个回答

  • Voted
  1. Best Answer
    Thijs Feryn
    2023-05-31T20:52:57+08:002023-05-31T20:52:57+08:00

    这段 VCL 代码似乎指定了一些关于何时绕过缓存的规则。然而,它的写法并没有多大意义。

    绕过缓存

    return(pass)不是绕过上下文中缓存的正确方法vcl_backend_response。当传入请求绕过缓存时return(pass)使用。vcl_recv

    绕过vcl_backend_response缓存意味着阻止将传入对象存储在缓存中。最佳实践要求您这样做set beresp.uncacheable = true,分配一个 TTL,然后return(deliver)。这可以确保该对象在一定时间内绕过缓存,直到下一个后端响应满足所需的条件。

    我的启用beresp.uncacheable,您确保该对象最终出现在等待列表中并成为请求合并的候选者。

    删除cookie

    删除 cookie 通常有助于提高命中率。在后端上下文中,您将删除Set-Cookie标头。vcl_backend_response这是在through中正确完成的unset beresp.http.Set-Cookie,但是这是无条件完成的。

    这意味着Set-Cookie不会发生任何操作,这可能会导致行为不一致。不确定删除这些 cookie 是否需要先决条件。

    您还可以通过删除传入的 cookie unset req.http.Cookie。vcl_backend_response但运行中似乎有类似的调用unset beresp.http.Cookie。

    这表明Cookie将收到响应标头。这似乎不太可能。

    重写VCL

    这就是我在没有任何其他上下文的情况下重写此 VCL 代码的方式:

    vcl 4.1;
    
    backend default {
        .host = "127.0.0.1";
        .port = "80";
    }
    
    sub vcl_recv {
        unset req.http.Cookie;
    }
    
    sub vcl_backend_response {
        if(beresp.status != 200) {
            set beresp.ttl = 120s;
            set beresp.uncacheable = true;
            return(deliver);
        }
    
        set beresp.http.X-Backend = beresp.backend.name;
        unset beresp.http.Set-Cookie;
        set beresp.http.Cache-Control = "no-store";
    
        if (bereq.http.x-render-type == "test" && beresp.http.Content-Type ~ "text/html") {
            set beresp.ttl = 120s;
            set beresp.uncacheable = true;
            return(deliver);
        }
    
        return (deliver);
    }
    

    警告:我不建议将其复制/粘贴到您的生产环境中。我有一种感觉,在编写这个 VCL 时,有些地方被偷工减料了。由于我没有任何其他上下文,因此我不想建议使用它。

    • 0

相关问题

  • 缩放大文件下载?

  • Gzip 与反向代理缓存

  • 如何禁用tomcat缓存?我遇到了奇怪的静态文件问题

  • mod_mem_cache 提供错误的内容!

  • NFS 缓存导致间歇性滞后

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve