Varnish 7.0中的更改¶
有关将当前Varnish部署更新到新版本的信息,请参见 升级到Varnish 7.0 。
有关Varnish更改的更详细的技术说明,以及指向已修复的问题和已合并的拉入请求的链接,请参阅 change log 。
PCRE2¶
此版本的一个主要变化是正则表达式引擎从PCRE迁移到PCRE2。这种更改在任何使用正则表达式的地方都应该是透明的,比如VCL、BAN表达式、VSL查询等。
有一些参数更改,请参阅升级说明以了解更多详细信息。
RFC8941-结构化字段¶
对于VCL编写者来说,HTTP头使用的是可以友好地描述为“异类语法”的东西,这并不奇怪。
2016年,在从斯德哥尔摩的HTTP研讨会返回的火车上,为了回应允许在HTTP头中使用JSON的提议,我开始了一项努力,最终发布了 RFC 8941 Structured Fields 。
结构化字段中的语法是从当前标准化的标头中提取出来的,这意味着已经涵盖了绝大多数现有的HTTP标头。
有一些不幸的例外,最明显的是Cookie标头。
从这个版本开始,我们逐渐将VCL迁移到结构化字段语义。
第一个变化是现在可以通过使用以下RFC 8941语法在VCL中包括BLOB:
':' + <base64> + ':'
例如,VCL字符串 "helloworld"
可以表示为BLOB文本 :aGVsbG93b3JsZA==:
而不涉及VMOD。
看见 VMOD BLOB-用于VCL BLOB类型、编码和解码的实用程序 。
第二个也可能是更重要的变化是,VCL中的数字现在也符合RFC8941:最多15位数字和最多3位小数,不再允许使用“科学记数法”。
(这些限制是经过深思熟虑后选择的,以确保不会发生溢出,即使在用IEEE-754 64二进制浮点变量表示数字的语言中处理HTTP头时也是如此。)
华而不实¶
参数¶
参数发生了更改:
新的
pcre2_jit_compilation
布尔默认为ON默认值增加到16KB,用于
vsl_buffer
的默认值增加到96kB
workspace_client
的默认值增加到96kB
workspace_backend
最小值增加到384B,用于
workspace_session
最小值增加到65535B
h2_initial_window_size
的默认值增加到80kB
thread_pool_stack
的默认值增加到64KB
thread_pool_stack
在32位系统上vcc_acl_pedantic
已删除,请参阅升级说明以了解更多详细信息。pcre_match_limit
was renamed topcre2_match_limit
pcre_match_limit_recursion
was renamed topcre2_depth_limit
新的
h2_rxbuf_storage
默认设置为Transient
有关更多详细信息,请参阅升级说明。
Varnish的其他变化¶
对于PASS交易, varnishd
不再剥离 Range
来自客户端请求的标头或 Accept-Range
和 Content-Range
来自后端响应的标头,以允许直接从后端进行部分传递。
什么时候 http_range_support
启用(默认设置)将对后端响应执行一致性检查,格式错误或不一致的响应将被视为提取错误。
为从存储中分配的HTTP/2请求正文提供了新的缓冲区。
有关这两个主题的更多详细信息,请参阅升级说明。
对VCL的更改¶
VCL变量¶
一种新的 req.hash_ignore_vary
标志允许在查找过程中跳过Variable标头检查。当只有资源的新鲜度相关,并且在表示上没有细微差异时,这可能很有用。
出于互操作性的目的,现在可以引用不是有效的VCL符号而是有效的HTTP标头名称的标头名称,例如::
req.http."dotted.name"
这很少观察到,只有在更好地与某些客户端或服务器的特定需求集成时才需要。
某些全局VCL符号可以在其声明之前引用,这已扩展到以下关键字的所有全局VCL符号:
acl
backend
probe
sub
请考虑以下示例:
sub vcl_recv {
set req.backend_hint = b;
}
backend b {
.host = "example.org";
}
它曾经在VCL编译中失败,并显示“符号未找到:‘B’”。 vcl_recv
,并且现在受支持。
位标志¶
某些VCL关键字有新的位标志语法::
keyword +flag -other ...
类似于位标志 varnishd
参数 debug
, feature
和 vsl_mask
一种 +
前缀表示升起一面旗帜,而一个 -
标志被清除的前缀。
这个 acl
Keyword支持以下标志:
log
pedantic
(默认情况下启用)table
例如::
acl <name> +log -pedantic { ... }
看见 访问控制列表(ACL) 。
这个 include
关键字支持 glob
旗帜。
例如::
include +glob "example.org/*.vcl";
看见 INCLUDE语句 。
有关更多详细信息,请参阅升级说明。
VMODs¶
新的 BASE64CF
中的编码方案 vmod_blob
。它类似于 BASE64URL
,对以下内容进行了更改 BASE64
:
+
replaced with-
/
replaced with~
_
作为填充字符
它被某个CDN提供商使用,他也是这个名字的灵感来源。
请参阅 vmod_blob
人工 (Base64* )。
Varnishlog¶
如果在流对象上发生缓存命中,则仍在获取的对象, Hit
记录包含获取任务的进度。这应该有助于在缓存命中速度较慢时进行故障排除,无论后端是否仍在为响应提供服务。
看见 VCL 。
默认情况下 VCL_acl
记录不再发出。可以通过添加一个 +log
ACL声明的标志。
看见 访问控制列表(ACL) 。
瓦尼西克萨¶
新的 %{...}t
时间格式:
sec
msec
usec
msec_frac
usec_frac
请参阅 varnishncsa
人工 (FORMAT )了解更多信息。
瓦尼沙德姆¶
这个 -t
选项设置两个连接到正在运行的 varnishd
实例和发送到该实例的各个命令。
在交互模式下,命令完成应该更准确。
Varnish测试¶
测试用例通常应该更具反应性,无论是检测 varnishd
启动失败,正在等待 varnishd
停止,或者当测试失败并且存在等待同步的障碍时。
客户端和服务器在请求和响应中最多可以有64个标头。
这个 feature
命令允许优雅地跳过缺少特定需求的测试用例。现在可以根据某个功能的存在跳过测试。
例如,对于以32位环境为目标的测试用例,使用正常的DNS设置:
feature dns !64bit
有新的功能检查:
coverage
asan
msan
tsan
ubsan
sanitizer
workspace_emulator
未登记的人 pcre_jit
功能检查已取消。
请参阅职训局手册 (特征 )了解更多详细信息。
有一种新的 tunnel
在两个对等点之间充当代理的命令。隧道可以暂停并控制在每个方向上传输的数据量,并可用于触发套接字超时,可能是在协议帧中间,而不必更改对等设备的实现方式。
请参阅职训局手册 (隧道 )了解更多详细信息。
有一个新的动态宏 ${string,repeat,<uint>,<string>}
避免手工维护时出现过长的队伍或潜在的错误。例如,以下两个字符串是等价的:
"AAA"
"${string,repeat,3,A}"
请参阅职训局手册 (MACROS )了解更多详细信息。
对HTTP/2测试也有各种改进,而且应该会有更多改进。