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.xidbereq.xidsess.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.xidbereq.xidsess.xid

A ReqStart 对于错误的请求发出记录,从而允许 varnishncsa 查找客户端IP地址。

瓦尼沙德姆

这个 debug.xid 命令通常由以下人员使用 varnishtest 现在直接设置下一个VXID。

Varnish测试

现在可以向进程发送特殊密钥NPAGE、PPAGE、HOME和END。

这个 -nolen 选项是隐含的 txreqtxresp 当其中一个 Content-LengthTransfer-Encoding 存在标头。

一种新的 stream.peer_window 变量类似于 stream.window 可用于HTTP/2检查。

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

有了一个新的方便宏 WS_TASK_ALLOC_OBJ() 要从当前任务的工作区分配对象,请执行以下操作。

这个 NO_VXID 宏可用于显式记录事务外部的记录。

自定义后端实现现在负责打印标题,这避免了在自定义实现依赖于 http_*() 这还将记录正在设置的标头。

这个 VRT_new_backend*() 函数接受额外的后端参数,即可选的Via后端参数。它不能是自定义后端实现,但可以是解析本机后端的指挥交换机。

有一种新的 authority 中的Via后端的字段 struct vrt_backend

有一种新的 exp_close 中的字段 struct vrt_backend_probe

董事通过以下途径取得并持有对其他董事的引用 VRT_Assign_Backend() (通常是有其他控制器作为后端的任何控制器)现在需要实施新的 .release 类型的回调 void vdi_release_f(VCL_BACKEND) 。此函数由调用 VRT_DelDirector() 。该实现预计会删除控制器持有的任何后端引用(同样使用 VRT_Assign_Backend() 使用 NULL 作为第二个论点)。

eof