Varnish 7.2中的更改

有关将当前Varnish部署更新到新版本的信息,请参见 升级到Varnish 7.2

有关Varnish更改的更详细的技术说明,以及指向已修复的问题和已合并的拉入请求的链接,请参阅 change log

华而不实

延拓

从Varnish的最初几天起,我们就一直在谈论为“更高级的东西”提供一个扩展点,而且总的来说,我们确实为它在整个架构中保留了一席之地。

现在一个可信的用例终于出现了,我们已经实现了“Varnish扩展”(VTLA:“vext”),它既可以用来加载环境VMOD,也可以用来实现全新的功能,例如装卸工。

看见 Vext-Varnish扩展 有关更多信息,请参阅参考手册。

参数

持续时间值(以秒为单位)可以选择采用与VCL相同语法的持续时间单位。例如,缺省值 default_ttldefault_gracedefault_keep 分别从 120.00010.0000.0002m10s0s

依赖平台的 tcp_keepalive_time MacOS上支持此参数。

新的 vcc_feature BITS参数替换以前的 vcc_* 布尔参数。后者仍然作为不推荐使用的别名存在。

Varnish的其他变化

VMODS向Varnishd公开的元数据已更改为非二进制格式,并且与所有以前的版本不兼容。这使得VCC(编译)过程可以避免使用 dlopen(3) ,这样既快又安全。

后台获取任务不再排队,因为当线程池饱和时,这可能会导致缓慢的宽限命中,从而导致无限期延迟。

对VCL的更改

VCL变量

ESI子请求不能再继承 req.http.transfer-encoding 标头,因为请求正文严格由顶级请求处理。

这个 resp.http.via 由Varnish使用生成的标题 server.identity 其默认为主机名。一个 req.http.via 录入前也生成表头 vcl_recv 。如果客户端请求或后端响应已经具有Via标头,则现在将追加而不是覆盖该标头。

A resp.http.via 标题不再由Varnish覆盖,而是追加到后面。

这个 server.identity 变量保证是在HTTP语法中定义的单个令牌,可以安全地用作VIA标头中的主机名或假名。

这个 now 变量在VCL子例程中保持不变。本来就是这样,但现在是正式定义的行为(双关语)。它保持相同的值,即使执行阻塞了很长一段时间,例如,在调用VMOD函数时。

捆绑的VMOD

对于实时时间戳,函数 std.now() 可以改为使用。还有一个新的 std.timed_call() 测量子例程的执行时间。

Vmod_cookie生成的Cookie标头不再带有虚假的尾随分号 (';' )在字符串末尾。

Varnishlog

这个 Begin 日志记录可以包含具有子任务的子级别的第4个字段。这个 Begin[4] 字段由 -E 日志实用程序中是否包含子任务的选项(或缺少该选项)。在内部,只有ESI任务受此过滤,但它也可以应用于由VMOD产生的任务。

类似地, Link 记录具有相同的可选第4个字段。

这个 -k 选项自 varnishlog 现已在以下位置提供 varnishncsa

Varnish状态

未使用的柜台 MAIN.fetch_no_thread 被重新调整用途并更名为 MAIN.bgfetch_no_thread 在后台回迁任务因线程池饱和而无法调度时发出信号。

以帮助估计 vsl_space 消费,新的计数器 MAIN.shm_bytes 已添加。它提供了比现有的 MAIN.shm_cycles 这取决于 vsl_space 布景。

名为的新投稿脚本 varnishstatdiff 可以用来比较两个 varnishstat -1 使用友好的diff格式执行 varnishstat 的特定输出。

Varnish测试

新宏 ${pkg_version}${pkg_branch} 分别扩展到 7.2.07.2 用于当前版本。

可以将屏幕上的文本与正则表达式与新的 process -match 指挥部。

新的 filewrite [-a] 命令可以将文本放入或追加到文件中。

默认情况下,VTC中的Varnish实例名称用作可预测VIA标头的服务器标识。

例如::

varnish v1 -vcl+backend { ... }

预期的Via标头为::

Via: 1.1 v1 (Varnish/7.2)

属性将实例名称设置为其他值。 -arg 命令来更改 varnishd -i 选择。

针对开发人员和VMOD作者的更改

这个 varnishtest -i 选项仅在Varnish源代码树中起作用,在这种情况下,新宏 ${topsrc} 除了旧的之外,还可以使用 ${topbuild} 宏命令。

这些功能 VRT_AddVDP()VRT_AddVFP()VRT_RemoveVDP()VRT_RemoveVFP() 都已被弃用。

这个 VCS_String() 函数可以接受字符串 "B" 用于包裹分支。

这个 vnum.h 函数向VMOD和VEXT作者公开。

的终止规则 WRK_BgThread() 都放松了,允许VMOD使用它。

eof