Varnish 7.2中的更改¶
有关将当前Varnish部署更新到新版本的信息,请参见 升级到Varnish 7.2 。
有关Varnish更改的更详细的技术说明,以及指向已修复的问题和已合并的拉入请求的链接,请参阅 change log 。
华而不实¶
延拓¶
从Varnish的最初几天起,我们就一直在谈论为“更高级的东西”提供一个扩展点,而且总的来说,我们确实为它在整个架构中保留了一席之地。
现在一个可信的用例终于出现了,我们已经实现了“Varnish扩展”(VTLA:“vext”),它既可以用来加载环境VMOD,也可以用来实现全新的功能,例如装卸工。
看见 Vext-Varnish扩展 有关更多信息,请参阅参考手册。
参数¶
持续时间值(以秒为单位)可以选择采用与VCL相同语法的持续时间单位。例如,缺省值 default_ttl
, default_grace
和 default_keep
分别从 120.000
, 10.000
和 0.000
至 2m
, 10s
和 0s
。
依赖平台的 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.0
和 7.2
用于当前版本。
可以将屏幕上的文本与正则表达式与新的 process -match
指挥部。
新的 filewrite [-a]
命令可以将文本放入或追加到文件中。
默认情况下,VTC中的Varnish实例名称用作可预测VIA标头的服务器标识。
例如::
varnish v1 -vcl+backend { ... }
预期的Via标头为::
Via: 1.1 v1 (Varnish/7.2)
属性将实例名称设置为其他值。 -arg
命令来更改 varnishd -i
选择。