Varnish 7.3中的更改¶
有关将当前Varnish部署更新到新版本的信息,请参见 升级到Varnish 7.3 。
有关Varnish更改的更详细的技术说明,以及指向已修复的问题和已合并的拉入请求的链接,请参阅 change log 。
华而不实¶
参数¶
有一个新参数 transit_buffer
默认情况下禁用,以限制用于不可缓存响应的存储量。这在速度较慢的客户端可能会消耗较大但不可缓存的对象的情况下非常有用,以防止它们以牺牲可缓存资源为代价过快地填满存储。启用传输缓冲区后,客户端请求将有效地保持其后端连接打开,直到客户端响应传递完成。
ESI处理更改¶
现在,200和204以外的响应状态代码被视为ESI片段的错误。
以前,任何 ESI:include
对象会被包括在内,无论它的状态是什么,200,503,无关紧要。
从现在开始,默认情况下,将只包括状态为200和204的对象,任何其他状态代码都将使父ESI请求失败。
如果需要交付其他状态的对象,则应将其在VCL中的状态更改为200,例如在 sub vcl_backend_error{}
, vcl_synth{}
或 vcl_deliver{}
。
如果 param.set feature +esi_include_onerror
被使用,并且 <esi:include …>
标记有一个 onerror="continue"
属性,则将传递任何和所有ESI:Include对象,无论其状态如何,并且即使部分传递它们也不会使父ESI请求失败。要非常谨慎地使用。
Varnish的其他变化¶
除了传统的Unix域套接字之外,Varnish现在还支持抽象套接字。如果操作系统支持它们,就像任何最新的Linux内核一样,抽象套接字可以使用常见的 @
接受套接字的符号,例如::
varnishd -a @kandinsky
瘦弱 Last-Modified
其时间戳位于对应的 Date
标题不再是重新验证的候选对象。这意味着,当陈旧对象可用时,后续提取将不会包括 If-Modified-Since
标题。一个弱者 Last-Modified
标题不会阻止 Etag
重新验证。
对正在流传输的对象的缓存命中不再阻止传递对范围请求的部分响应(状态代码206)。
对VCL的更改¶
VCL变量¶
变数 req.xid
, bereq.xid
和 sess.xid
现在是整数而不是字符串,但应该在字符串上下文中不发生VCL更改的情况下保持可用。
传输缓冲区可以在每次读取时使用 beresp.transit_buffer
变量。
VCL的其他更改¶
后端有一个新的 .via
可选地引用另一个后端的属性::
backend detour {
.host = "...";
}
backend destination {
.host = "...";
.via = detour;
}
正在尝试连接 destination
连接到 detour
具有PROXYv2协议头目标 destination
的地址。或者, destination
后端可以使用其他新的 .authority
属性在PROXYv2标头中定义授权TLV。
后端可以连接到Linux::上的抽象套接字
backend miro {
.path = "@miro";
}
这与 varnishd -a
命令行选项。
探测器有了一个新的 .expect_close
属性默认为 true
,与当前行为相匹配。将其设置为 false
将把最终检查推迟到探测器超时之后。
Varnishlog¶
VSL记录的内存和磁盘格式已更改为允许64位VXID编号。新的二进制格式是 not compatible 对于以前的版本,从现在起,使用以前的Varnish版本执行的和日志转储不再可读。因此,删除了未使用的日志标记。
VXID范围限制为 VRT_INTEGER
要将变量拟合到VCL中 req.xid
, bereq.xid
和 sess.xid
。
A ReqStart
对于错误的请求发出记录,从而允许 varnishncsa
查找客户端IP地址。
瓦尼沙德姆¶
这个 debug.xid
命令通常由以下人员使用 varnishtest
现在直接设置下一个VXID。
Varnish测试¶
现在可以向进程发送特殊密钥NPAGE、PPAGE、HOME和END。
这个 -nolen
选项是隐含的 txreq
和 txresp
当其中一个 Content-Length
或 Transfer-Encoding
存在标头。
一种新的 stream.peer_window
变量类似于 stream.window
可用于HTTP/2检查。