Varnish 6.5.0中的更改

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

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

华而不实

访问控制列表(ACL)

如果在ACL中使用的网络号不具有全零主机部分,则VCL编译器现在发出警告(例如, "192.168.42.42"/24 )。默认情况下,此类ACL条目固定为全零,并且该事实记录在 ACL VSL标签。

参数

一种新的 vcc_acl_pedantic 参数,当设置为 true 在ACL条目包括网络前缀,但主机位不全为零的情况下,会将上面记录的ACL警告转换为错误。

这个 solaris jail has been improved and can reduce privileges even further. There is now a new optional -j solaris,worker=... 参数,该参数允许扩展辅助(缓存)进程的有效权限集。

Varnish的其他变化

在VCL编译器中改进了一些错误消息。

对VCL的更改

VCL变量

一种新的 obj.can_esi 已添加变量以标识是否可以对响应进行ESI处理。

一次 resp.filters 显式设置,尝试设置 resp.do_* 字段会导致VCL失败。同样的规则也适用于 beresp.filtersberesp.do_* 菲尔兹。

这个 BACKEND VCL类型现在有一个 .resolve() 方法直接从VCL中找到有效的后端。如果选择了导演,则决议将被推迟到从 vcl_backend_fetchvcl_pipe **

# eager backend selection
set bereq.backend = bereq.backend.resolve();

现在可以手动设置 Connection: close 标题输入 beresp 发出不应回收后端连接的信号。这可能有助于处理在某些情况下难以管理其连接端的后端,例如某些类型的资源。

应注意保留Connection Header中列出的其他Header::

sub vcl_backend_response {
    if (beresp.backend == faulty_backend) {
        if (beresp.http.Connection) {
            set beresp.http.Connection += ", close";
        } else {
            set beresp.http.Connection = "close";
        }
    }
}

VCL的其他更改

在……的失败 vcl_recv 可以在以下时间恢复执行 vcl_hash 在有效结束交易之前,这一点已经得到纠正。在……的失败 vcl_recv 现在是决定性的了。

有一种新的语法用于 BLOB 字面值: :<base64>: 。此语法还用于将BLOB自动转换为字符串。

304响应的行为已更改为不更新 Content-Encoding 存储对象的响应头。

VMODs

一种新的 std.blobread() 功能类似于 std.fileread() 添加了用于处理二进制文件的。

碎片导演的 .add_backend() 方法有一个新的可选 weight 参数。添加或删除后端时出现的错误现在会使事务失败(或 vcl.load 命令输入 vcl_init ),但无效的权重不会导致硬故障。

碎片控制器不再输出(未使用) canon_point 中的属性 backend.list 命令。

Varnishlog

这个 BackendReuse 日志记录已停用。它的命名与其他地方不一致,比如统计计数器,在那里我们使用单词Reuse和Reccle(它应该被命名为 BackendRecycle 如果有什么不同的话)。

这个 BackendOpen 现在,记录可以判断到后端的连接是从池中打开还是重新使用,而 BackendClose 记录将显示连接是否被有效关闭或回收到池中。

瓦尼沙德姆

这个 backend.set_health 命令可用于在生病和健康之间强制特定状态,或恢复自动行为,这取决于探测器的存在。虽然强制后端出现问题会阻止其被控制器选择,但从VCL直接选择后端仍会尝试连接。此问题已修复,并澄清了该命令的文档。

Varnish状态

帮助屏幕现在以交互模式通过 h 钥匙。

同样在交互模式中,现在选择初始详细信息,以便通过 -f-I 选项实际上是在不手动增加详细级别的情况下显示的。

使用 -f 选项现在已弃用,转而支持 -I-X 按顺序处理的选项。虽然仍然存在,但 -f 选项现在也可以按顺序工作,而不是先按排他筛选器,然后按包含筛选器。它也被错误地记录为包容性优先。

JSON输出稍有更改,可以更轻松地与可能将JSON对象映射到类型的编程语言一起使用。有关更多详细信息,请参阅升级说明。

有两个新的 MAIN.beresp_uncacheableMAIN.beresp_shortlived 柜台。

Varnish测试

这个 process -expect-text 命令将等待文本显示的时间延长一个数量级。过去,它对任何形式的时间中断都过于敏感。

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

构建系统

想要生成VCC文件的VMOD作者现在可以使用 VARNISH_VMODS_GENERATED() 宏自 varnish.m4 用于AutoTools版本。

工作区API

由于预期未来将包含在VRT中,工作区API发生了许多变化。不受欢迎的 WS_Reserve() 函数最终被删除,在函数之后 WS_ReserveSize()WS_ReserveAll() 是在Varnish缓存6.3.0中引入的。

关于工作空间预留的话题, WS_Front() 函数现在已过时,取而代之的是 WS_Reservation() 。这两个函数的行为类似,但后者确保只在预订期间调用它。在保留之外,没有合法的理由进入工作空间的正面。

如果在代码的一部分中进行了预订,但在其他地方使用,则可以在以后使用新的 WS_ReservationSize() 功能。

的返回值 WS_Printf() 现在是一个常量字符串。

其他VRT/cache.h更改

  • 增列 VRT_DirectorResolve() 解决董事的问题

  • 增列 VRT_BLOB_string() 对于上面记录的默认斑点折叠

利布瓦尼沙皮

有三个新的VSC参数可以使用 VSC_Arg() 功能:

  • 'I' 包括与全局模式匹配的计数器

  • 'X' 排除与全局模式匹配的计数器

  • 'R' to include required counters regardless of 'I' and 'X'

这个 'f' 参数现在已弃用,并用 'I''X' 。过滤方式 'f' 用于先检查排除项,然后检查包含项,它们都按顺序进行测试,第一个匹配的项决定结果。

这个 'R' 参数优先于常规筛选,并可用于确保存在某些计数器,而不管用户配置如何。

唇彩Varnish

A VSA_BuildFAP() 函数是为了方便构建 struct suckaddr (又名 VCL_IP )来自系列、地址和协议组件。

我们添加了 VRE_quote() 以便于使用正则表达式生成文字字符串匹配。它可用于确保放在正则表达式中的用户定义的字符串文字不会意外地更改整个表达式的行为。

Varnish二进制堆实现已添加到 VBH_ 用于VMOD的前缀(通过包括 vbh.h )。

VSB对动态分配与静态分配的支持已更改:

对于动态分配,请使用:

VSB_new_auto() + VSB_destroy()

对于先前存在的缓冲区,请使用:

VSB_init() + VSB_fini()

VSB_new() + VSB_delete() 现在已被弃用。

eof