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 / 问题 / 1057573
Accepted
anup
anup
Asked: 2021-03-19 23:19:59 +0800 CST2021-03-19 23:19:59 +0800 CST 2021-03-19 23:19:59 +0800 CST

Varnish - 如何在响应标头中设置 TTL?

  • 772

我以前没有在 Varnish 上尝试过这个。而且我必须承认,我上一次使用 Varnish 的经历要追溯到很久以前 - 版本 2.1.5 天!

我已将 varnish 6.x 设置为简单/基本的静态 http-cache。我已经从这个清漆中实现了我希望的大部分内容,然后我想到了将 cache-ttl 信息显示为响应标头。在这里,我遇到了障碍。我肯定做错了。可能 vcl_delivery 可能不会得到 beresp.ttl。我不知道。这是我添加到 vcl_deliver

 set resp.http.X-TTL = "TTL (" + beresp.ttl +")";

我得到编译错误:

Mar 19 07:05:41  varnishd[55516]: Message from VCC-compiler:
Mar 19 07:05:41  varnishd[55516]: ('/etc/varnish/default.vcl' Line 97 Pos 40) -- (Pos 49)
Mar 19 07:05:41  varnishd[55516]:     set resp.http.X-TTL = "TTL (" + beresp.ttl +")";
Mar 19 07:05:41  varnishd[55516]: ---------------------------------------##########------
Mar 19 07:05:41  varnishd[55516]: Not available in method 'vcl_deliver'.

我尝试将 beresp.ttl 分配为 vcl_backend_response 中的标头变量:

set beresp.http.x-ttl = beresp.ttl

那也没有用。

让我想知道,这是否可能?如果是这样,如何实现?

varnish ttl
  • 1 1 个回答
  • 232 Views

1 个回答

  • Voted
  1. Best Answer
    Thijs Feryn
    2021-03-20T00:01:24+08:002021-03-20T00:01:24+08:00

    从 Varnish 4 开始,后端和客户端逻辑被分割成不同的线程。这种分裂也反映在 VCL 中。

    在 Varnish 的客户端,你有像req和resp访问请求和响应信息的对象。当您必须访问后端时,该req对象将用于构建bereq对象并将响应存储在beresp对象中。

    正如您注意到的那样,beresp上下文在 中不可用vcl_deliver,因为交付阶段发生在客户端。

    这就是为什么最好将X-TTL标头设置在后端。

    这是执行此操作的 VCL 代码:

    sub vcl_backend_response {
        set beresp.http.X-TTL = "TTL (" + beresp.ttl +")";
    }
    
    • 1

相关问题

  • 清漆配置仅缓存未登录用户

  • Varnish 缓存如何处理不同的域?

  • 缩放大文件下载?

  • Gzip 与反向代理缓存

  • 在 Windows XP 主机上使用虚拟化 linux 来宾评估 Varnish 的最简单方法是什么?

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