升级到Varnish 5.0

对VCL的更改

  • 现在应该在使用之前定义所有VCL对象

    • 特别是,这是现在的ACL所必需的。定义前正在使用的ACL的错误消息令人困惑-请参阅PR#2021::

      Name <acl> is a reserved name
      
  • VCL名称仅限于字母数字字符、破折号(-)和下划线 (_) 。此外,第一个字符应为字母。也就是说,名称应该匹配“ [A-Za-z] [A-Za-z0-9_-] *“。

  • 与字符串一样,后端和整数现在可以用作IF语句中的布尔表达式。看见 vcl(7) 了解更多细节。

  • 添加支持以在赋值中执行匹配,获得布尔值作为结果::

    set req.http.foo = req.http.bar ~ "bar";
    
  • 函数和方法调用的返回值可能会被丢弃。

后端

  • 通过以下方式添加了对代理协议的支持 .proxy_header 属性。可能的值为1和2,分别对应于代理协议版本1和2。

vcl_recv

  • 增列 return (vcl(label)) 切换到标记为VCL的 label

  • 这个 rollback 功能已停用。

vcl_hit

  • 替换 return (fetch) 使用 return (miss)

vcl_backend_*

  • 添加了对的读取访问权限 remote.ipclient.iplocal.ipserver.ip

vcl_backend_fetch

  • 添加了对的写入访问 bereq.body 、请求正文。仅限 unset 目前支持。

  • 我们现在默认发送请求正文(请参见 始终发送请求正文/“可缓存的帖子” )。要保留以前的行为,请在任何行为之前添加以下代码 return (..) 此子例程中的语句::

    if (bereq.method == "GET") {
        unset bereq.body;
    }
    

vcl_backend_error

  • 添加了对的写入访问 beresp.body ,响应体。这可能会取代 synthetic() 在未来的版本中。

vcl_deliver

  • 添加了对的读取访问权限 obj.ttlobj.ageobj.graceobj.keep

vcl_synth

  • 添加了对的写入访问 resp.body ,响应体。这可能会取代 synthetic() 在未来的版本中。

管理界面

  • 要禁用CLI身份验证,请使用 -S none

  • n_waitinglist 已删除统计信息。

对参数的更改

  • 增列 ban_lurker_holdoff

  • 已删除 session_max 。此参数实际上从4.0起不起作用,但可能会在将来的版本中重新出现。

  • vcl_path 现在是冒号分隔的目录列表,替换 vcl_dir

  • vmod_path 现在是冒号分隔的目录列表,替换 vmod_dir

其他变化

  • varnishstat(1) -f选项接受 glob(7) 图案。

  • 缓存-无法缓存的请求(即通道)的控制和Expires标头不会被解析。因此,不再记录TTL VSL标签的RFC变体。