Varnish 7.1中的更改

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

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

华而不实

参数

存在一种新的参数:不推荐使用的别名。他们的文档很少,主要是指他们别名的实际符号。除非明确说明,否则它们不会在CLI中列出。

目前还没有不推荐使用的别名,但一些别名已经计划在未来的版本中使用。当直接使用别名参数时,几乎没有任何开销。

不受欢迎的 vsm_space 参数已删除。

一种新的 cc_warnings 参数包含从 cc_command ,进而又产生了新的扩张:

  • %d: the raw default cc_command

  • %D: the expanded default cc_command

  • %wcc_warnings 参数

  • %n :工作目录 (-n 选项)

这应该有助于围绕VCL编译创建包装器脚本。

有一种新的 experimental 参数,该参数与 feature 参数,只是它保护可能不被认为是完整或稳定的功能。试验性功能可以升级为常规功能,也可以删除,而不会被认为是突破性的变化。

命令行选项

的不推荐使用的子参数 -l 选项被移除,它现在是 vsl_space 仅限参数。

这个 -T-M-P 命令行选项可以多次使用,而不是只保留最后一次。

当没有活动的VCL时,也总是隐式使用第一个加载的VCL。现在,这仅适用于加载了 -f-b 选项,因为它们意味着 vcl.use 。通过Varnish CLI加载的VCL (vcl.loadvcl.inline )通过CLI脚本加载 -I 命令行选项需要显式 vcl.use

Varnish的其他变化

ESI现在支持 onerror="continue" 属性。然而,为了生效一项新的 +esi_include_onerror 需要提升功能标志。

对VCL的更改

现在可以将一个 BLOB 值设置为 BODY 变量,除了 STRING 和以前一样。

VCL变量

添加了新的VCL时间戳变量以跟踪创建HTTP消息的时间点:

  • req.time

  • req_top.time

  • resp.time

  • bereq.time

  • beresp.time

  • obj.time

新的 req.transport 变量根据需要返回“HTTP/1”或“HTTP/2”。

VCL的其他更改

在需要正则表达式文字的地方,现在可以连接常量字符串。当表达式的一部分来自环境特定的INCLUDE时,或者将一个长表达式拆分成多行时,它会很有用。(在7.0.1中引入)

类似于 varnishd 参数,现在可以拥有不推荐使用的VCL变量别名。虽然到目前为止还没有,但别名将允许重命名一些符号,而不会立即破坏现有的VCL代码。

不推荐使用的VCL别名没有运行时开销,它们在VCL编译时被具体化。

VMODs

新的 字符串strftime(时间时间,字符串格式) 用于UTC格式设置的函数。

现在可以声明VMOD函数和对象方法的不推荐使用的别名,就像VCL别名一样。这个 cookie.format_rfc1123() 函数已重命名为 字符串FORMAT_DATE(当前时间,持续时间增量) ,为了兼容,前者被保留为后者的弃用别名。

不推荐使用的VMOD别名没有运行时开销,它们在VCL编译时被具体化。

Varnishlog

现在可以使用以下命令写入标准输出 -w - ,与读取标准输入的能力不相上下 -r - 。这在守护程序模式下是不可能的。

在管道场景中,后端事务发出开始时间戳,客户端和后端事务发出进程时间戳。

瓦尼西克萨

现在可以使用以下命令写入标准输出 -w - ,与读取标准输入的能力不相上下 -r - 。这在守护程序模式下是不可能的。

瓦尼沙德姆

什么时候 vcl.show 在不带参数的情况下调用,则默认为活动的VCL。

这个 param.set 命令接受 -j 选择。在本例中,JSON输出与 param.show -j 更新的参数的。

一种新的 debug.shutdown.delay 出于测试目的,Varnish CLI中提供了命令。出于测试目的,查看其环境(服务管理器、容器编排器等)对 varnishd 的子进程花费大量时间 stop

Varnish测试

这个 SO_RCVTIMEO_WORKS 功能检查已取消。(在7.0.1中引入)

报道《中国日报》 logexpect 为了可读性,事件被重新安排。

这个 abort 命令中的 logexpect 便利的 varnishtest 现在可以用来触发 abort() 以帮助调试VSL客户端库代码。

这个 vtc.barrier_sync() VMOD函数可用于 vcl_init 而今而后。

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

这个 SO_RCVTIMEOSO_SNDTIMEO 现在在构建时需要套接字选项,因为如果没有套接字选项,则会阻止某些超时生效。我们不再检查它们是否有效工作,因此删除了 SO_RCVTIMEO_WORKS 要素检入 varnishtest 。(在7.0.1中引入)

默认情况下,如果在配置时可用,Varnish将使用libunind, --without-unwind 配置标志可以防止这种情况,并回退到libexecinfo以生成回溯。

有一个新的调试存储后端用于测试目的。到目前为止,它只能用于确保分配尝试返回的空间少于请求的空间。

有新的C宏用于 VCL_STRANDS 创作: TOSTRAND()TOSTRANDS() 在以下位置提供 vrt.h

新的实用程序宏 vmin[_t]vmax[_t]vlimit[_t] 在以下位置提供 vdef.h

获取和传递筛选器现在应注册和取消注册 VRT_AddFilter()VRT_RemoveFilter()

动态后端现在是引用计数的,VMOD作者必须使用 VRT_Assign_Backend()

这个 vtc.workspace_reserve() VMOD功能从现在开始将内存清零。

+workspace 引发调试标志,工作区日志不再作为原始日志与任务断开连接而发出。将工作空间日志与任务的其余部分分组,应该有助于分析工作空间占用空间。

现在可以使用以下命令生成任意日志行 vtc.vsl()vtc.vsl_replay() ,它可以帮助测试日志处理实用程序。

还可以调整每个线程池的VXID缓存块大小 debug.xid 命令,该命令还可以帮助测试日志处理实用程序。

http_IsHdr() 现在被曝光为针对VMOD的严格ABI的一部分。

平台支持

CentOS

随着CentOS 8生命周期的结束,从现在开始,我们将在almarinux上构建el8包。这意味着我们将始终以最古老的el8分支为目标。例如,为el8.5构建的包不能保证在el8.1上工作,即使后者可能仍然受到Red Hat的支持。

系统ID

Varnish服务的杀戮模式从 processmixed 以确保在管理器进程被SYSTEM D超时时终止缓存进程。否则,将与缓存进程竞争,在旧缓存进程退出之前进行重新启动,从而在侦听端口等资源上造成冲突。

eof