升级到Varnish 5.1¶
Varnishd命令行选项¶
如果您必须更改5.1版的任何内容,那么最有可能的是 varnishd 在您的启动脚本中,因为我们对可以一起使用的选项有更严格的限制。这主要是为了澄清用于测试目的的选项的用法,例如使用 varnishd -C 检查VCL源代码的语法正确性。我们还增加了一些新的选项。
详细信息请参见 华而不实 ,但以下是摘要:
增列
-I clifile在启动时在辅助进程启动之前运行CLI命令。看见 启动CLI命令文件 。不止一个
-f现在允许在启动时预加载VCL实例的选项。其中最后一个成为在启动时处于活动状态的“引导”实例。要么
-b或一个或多个-f必须指定选项,但不能同时指定两个选项,并且不能同时省略它们,除非-d用于启动 varnishd 在调试模式下。如果空字符串指定为唯一-f选项,然后 varnishd 在不启动工作进程的情况下启动,管理进程将接受CLI命令。增列
-?以打印用法消息,该消息仅针对此选项打印。添加了
-x可选择打印某些类型的文档并退出。什么时候-x必须是唯一的选择。只有一位
-F或-d可以使用,但这两种方法都不能与-C。添加了
workuser参数设置为-j选择。
Varnishd参数¶
共享内存日志的大小现在限制为4G-1b(4294967295字节)。这将上限设置为
-l命令行选项和vsl_space和vsm_space参数。增列
clock_step,thread_pool_reserve和ban_cutoff(见 clock_step , thread_pool_reserve , ban_cutoff )。thread_pool_stack不再被认为是试验性的,并且有更广泛的文档记录,请参见 thread_pool_stack 。thread_queue_limit仅适用于排队的客户端请求,请参见 thread_queue_limit 。vcl_dir和vmod_dir已弃用,并将从未来版本中删除,请使用vcl_path和vmod_path相反(请参见 vcl_path , vmod_path )。所有参数都在每个平台上定义,包括那些不能在每个平台上运行的参数。其中大多数涉及到TCP堆栈的功能,例如
tcp_keepalive_intvl,tcp_keepalive_probes,accept_filter和tcp_fastopen。参数的输出中记录了参数不可用param.show指挥部。设置这样的参数不是错误,但没有任何效果。
对VCL的更改¶
为Varnish 5.0编写的VCL很可能在5.1版中无需更改即可运行。我们向该语言添加了一些新的元素和功能(您可能希望开始使用它们),澄清了一些问题,并弃用了一些很少使用的语言元素。
类型转换¶
我们花了一些心思来解释 + 和 - 用于具有不同数据类型的各种操作数组合的运算符,其中许多算作角例(例如,从IP地址减去一个字符串是什么意思?)。回想一下 + 表示数字操作数的加法,以及字符串操作数的字符串连接;如果需要字符串并且没有合理的数字解释,则可以将操作数转换为字符串并连接。
语义几乎在所有情况下都没有改变,但非法操作数组合的错误消息有所改善。最重要的是,我们花了时间审查这些案例,因此这将是VCL未来的工作方式。
总而言之:
如果的两个操作数
+或-为字节、持续时间、int或实数之一,则结果具有相同的数据类型,具有明显的数字解释。如果在需要字符串的上下文中计算这样的表达式(例如,为标题赋值),则首先执行算术运算,并将结果转换为字符串。整数和实数可以相加或相减,以得到实数。
可以将持续时间加到时间上或从时间中减去,以得到时间。
任何其他操作数类型组合都不能与
-。当一个
+表达式在字符串上下文中求值,然后对于操作数数据类型的所有其他组合,将操作数转换为字符串并串联。如果不需要字符串作为
+表达式,则其他任何数据类型组合都不合法。
有关数据类型的其他说明:
什么时候
bereq.backend设置为控制器,则如果控制器立即解析为后端,则它在后续读取时返回实际的后端,否则返回控制器。如果bereq.backend被设定为导演,然后beresp.backend引用为提取设置的后端。当在字符串上下文中使用这两种方法之一时,它将返回控制器或已解析后端的名称。后端类型的符号之间的比较现在可以正常工作::
if (bereq.backend == foo.backend()) { # do something specific to the foo backends }
持续时间类型可以在布尔上下文中使用,当持续时间小于或等于零时,评估为False,否则评估为True。
INT、DURATION和REAL值现在可以为负值。
响应代码¶
现在可以在VCL内部设置响应代码1000或更大。 resp.status 在客户响应中以1000为模进行传递。
IP地址比较¶
现在可以比较IP地址是否相等::
if (client.ip == remote.ip) {
call do_if_equal;
}
如果对象指定相同的套接字地址,则它们是相等的,不包括端口号。IPv6地址始终不等于IPv4地址(比较不能考虑v4映射的IPv6地址)。
装卸工类型和存储对象¶
用于存储后端的数据类型装卸现在在VCL和VMOD中可用。具有表单名称的存储对象 storage.SNAME 将存在于VCL实例中,其中 SNAME 是随提供的存储后端的名称 varnishd 命令行选项 -s 。如果没有 -s 给出了选项,然后 storage.s0 表示默认存储。该对象 storage.Transient 始终存在,指定为瞬时存储。看见 存储后端 ,以及关于的注释 beresp.storage 和 req.storage 下面。
所有VCL子例程(除 vcl_fini )¶
增列
return(fail)立即终止VCL处理。在所有情况下,除了vcl_synth,控制被定向到vcl_synth使用resp.status和resp.reason分别设置为503和“VCL失败”。vcl_synth在以下时间中止return(fail)。vcl_fini当VCL实例处于卸载状态(进入冷状态)且没有故障条件时执行。在任何尝试将请求或响应的第一行中的一个字段设置为空字符串时,都会调用VCL失败,例如
req.url,req.proto,resp.reason以此类推。
客户端VCL子例程¶
req.ttl已弃用,请参见 VCL 。
vcl_recv¶
增列
req.storage,它告诉Varnish在您选择保存请求正文时使用哪个存储后端(请参见 布尔CACHE_REQ_BODY(字节大小) )。return(vcl(LABEL))可能不会在重新启动后调用。它只能从活动的VCL实例中调用。
vcl_backend_response¶
增列
return(pass(DURATION))若要将对象设置为传球命中,请参见 击球传球又回来了 。该对象
beresp.storage现在应该使用装卸工类型来设置存储后端;beresp.storage_hint已弃用,并将在将来的版本中删除。设置beresp.storage_hint将设置为有效的存储beresp.storage也是。如果存储无效,beresp.storage原封不动。
属性定义了多个存储后端 -s Varnishd的命令行选项,但在 vcl_backend_response 、存储选择和核武器限制的使用已修改(见 nuke_limit )。以前,存储后端首先尝试核限制为0,失败时重试,限制配置为 -p 参数 nuke_limit 。当没有指定存储空间时,在重试之前,Varnish会按循环顺序检查每一个存储空间,核弹限制为0。
现在 beresp.storage 之前使用存储后端进行了初始化 vcl_backend_response 执行,并且存储设置在 beresp.storage 在其执行后将被使用。在所有情况下都使用配置的核武器限制。
vmod_std¶
其他变化¶
长期停用的存储后端类型umem已停用。
varnishstat(1):添加了
cache_hitmiss统计命中未命中对象的点击数。这个
cache_hitpassStat现在只计算击球传球对象的命中率。fetch_failed对于任何类型的提取失败,都会递增--当return(deliver)从…vcl_backend_response,或者当控制权转移到vcl_backend_error。添加了
n_test_gunzipStat,它在Varnish验证来自后端的压缩响应时递增--此操作以前与n_gunzip。添加了
bans_lurker_obj_killed_cutoff统计被禁令潜伏者杀死的对象数量,以使禁令数量保持在较低水平ban_cutoff。
varnishlog(1):命中未命中和命中传球对象的命中记录为
HitMiss和HitPass标签。在每种情况下,日志有效负载都是对象保存在缓存中的前一个事务的VXID(与Hit)。条目中包含
TTL标记和前缀HFP以记录为传球对象设置的持续时间。增列
vxid作为VSL查询的左侧令牌,允许查询在日志中搜索事务ID。看见 VSL-查询 。
varnishncsa(1):阐明了
%r格式化程序,请参阅中的注释 瓦尼西克萨 。阐明了
%{X}i和%{X}o标题X多次出现(最后一次出现为)时的格式化程序。
varnishtest(1):添加了
setenv和write_body命令,请参见 VTC 。-reason取代-msg设置响应的原因字符串(默认为“OK”)。增列
-cliexpect将预期的CLI响应与正则表达式匹配。添加了
-match运算符shell指挥部。添加了
-hdrlen运算符生成具有给定名称和长度的标头。这个
err_shell命令已弃用,请使用shell -err -expect取而代之的是。这个
${bad_backend}宏现在可以用于始终关闭的后端,这不需要端口定义(就像${bad_ip}在后端定义中)。varnishtest可以使用TERM,INT的KILL信号,但不是用HUP。这些信号会杀死进程组,从而停止由运行测试启动的进程。
添加了
vtest.sh自动化测试构建的工具,请参见 项目工具改进 。