Varnish 6.3中的更改

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

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

华而不实

参数

一种新的 pipe_sess_max 参数允许限制并发管道事务的数量。默认值为零,表示无限制,以实现向后兼容。

Varnish的其他变化

考虑到HTTP/2会话的传输字节数更准确: ReqAcct 如果流未完成,日志记录不再报告完全传递。

VCL温度的含义更改为 auto 状态:它用于自动冷却从活动到可用的VCL,但该VCL将保持不变 cold 。它现在是双向工作的,这样一个冷的VCL使 auto 状态,并可立即使用或标记,而无需将状态明确更改为 warm

因此,具有 cold 状态将不再自动预热。

计数器的管理,特别是动态计数器(例如,在加载或丢弃VCL时出现或消失)的性能有了显著的改进,涉及大量后端的设置应该响应更快。

对VCL的更改

VCL变量

这个 timeout_idle 参数可以在VCL中使用 sess.timeout_idle 变量。

VCL的其他更改

一种新的 error 过渡到 vcl_backend_error 允许故意移动到该子例程。它类似于 synth 转换,并且可以有选择地接受参数。以下三种说法等同:

return (error);
return (error(503));
return (error(503, "Service Unavailable"));

这个 error 过渡在以下位置可用 vcl_backend_fetchvcl_backend_response 。使用显式 error 过渡到 vcl_backend_fetch 不会递增 MAIN.fetch_failed 柜台。

可以两次导入同一个VMOD,只要这两个导入是相同的并且不会发生冲突。例如,这允许包含的VCL文件导入它们需要的VMOD,而不会阻止包含的VCL也执行相同的导入。

同样,现在可以在不同的名称下包括VMOD::

import directors as dir;

sub vcl_init {
    new rr = dir.round_robin();
}

这对于具有长名称的VMOD或可以在VCL代码中使用更具表现力的名称的VMOD很有用。

内置的VCL将 Host 标题中的小写字母 vcl_recv 要在以后改进其散列 vcl_hash 因为域名不区分大小写。

VMODs

std.ip() 现在使用可选的 STRING 参数来指定端口号或服务名称。

请参见: IP IP(字符串S, [IP fallback] ,BOOL Resolve=1, [STRING p] )

VSL-查询(7)

VSL查询的语法,主要通过 -q 选项,带 Varnishlog 和类似的工具,略有变化。查询中的前面和行尾将被视为简单的标记分隔符,因此在脚本中,例如您可以编写以下内容::

varnishlog -q '
    tag operator operand or
    tag operator operand or
    tag operator operand
' -g request ...

从现在开始,查询在行尾结束,但可以指定多个查询,在这种情况下,它的行为就像 or 运算符用于连接所有查询。

使用此语法更改后,将执行以下查询:

varnishlog -q '
    query1
    query2
'

相当于:

varnishlog -q '(query1) or (query2)'

换句话说,如果出于几个独立的原因使用Varnish实用程序来处理事务,则可以将复杂的查询分解为更简单的查询,方法是将它们分解为单独的行,对于可能在单个查询中需要的最复杂的查询,可以去掉括号。

如果您的查询既复杂又长,但不能适当地分解为多个查询,则仍可以使用反斜杠-换行符序列将其分解为多行:

tag operator operand and \
tag operator operand and \
tag operator operand

看见 VSL-查询 以获取有关此更改的更多信息。

有了这个查询行尾的新含义,现在就可以在查询中添加注释了。如果您由于多种原因再次遇到需要捕获事务的情况,您可以直接在查询中记录它::

varnishlog -q '
    # catch varnish errors
    *Error

    # catch client errors
    BerespStatus >= 400 and BerespStatus < 500

    # catch backend errors
    BerespStatus >= 500
' -g request

这样,当您以后重新访问复杂查询时,注释可能会帮助您保持对每个单独查询的理解。当查询存储在文件中时,这会变得更加方便。

Varnishlog(1)、varnishncsa(1)等

我们的日志处理工具集合能够指定多个 -q 选择。虽然以前只有最后一个 -q 选项将占上风,您现在可以传递多个单独的查询,并且筛选将作为 or 运算符用于连接所有查询。

一种新的 -Q 选项允许您改为从文件中读取查询。它还可以多次使用,加起来可以是任何 -q 已指定选项。

类似于 -c-b 对于客户端或后端事务, varnishncsa(1) 可以接受一次 -E 包括ESI交易记录的选项。

BackendStart 不再使用日志记录,但较新版本的日志实用程序应该仍然可以识别不推荐使用的记录。仍然可以使用较旧版本的读取写入文件的日志 varnishlog(1) ,而且向后兼容性正式达到了Varnish 6.0.0,尽管它 may 可以读取从旧版本保存的日志。

Debug 默认情况下,不再记录记录,并且可以从 vsl_mask 参数显示在日志中。由于此类记录不用于生产,因此它们只能通过以下方式自动启用 varnishtest(1)

Varnish状态

一种新的 MAIN.n_pipe Gauge跟踪正在进行的管道交易的数量。

一种新的 MAIN.pipe_limited 计数器跟踪事务由于 pipe_sess_max 参数。

Varnish测试

A client 现在可以使用 -method 针对以下方面的诉讼 txreq 指定请求方法的命令。这件事过去是用 -req 它仍然是兼容性的别名。

A clientserver 可以使用 -bodyfrom 分别针对 txreqtxresp 从文件发送正文的命令。

A HTTP/2 clientserver 可以使用GZIP内容编码,并可以访问 -gzipbody-gziplen

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

对于VMOD开发人员来说,最值得注意的变化是不推荐使用字符串列表,而是支持字符串。

像往常一样,VRT增加了新的功能,其他功能也被更改或删除。看见 vrt.h 查看自6.2.0版本以来的更改列表。

我们继续从VRT中删除不应该由VMOD作者使用的函数,这些函数只是VMOD基础结构代码的一部分。

eof