Varnish 4.1中的更改

Varnish 4.1是Varnish 4.0中新的流媒体架构的延续。

主动式安全功能

4.1中的新功能是支持不同类型的特权分离方法,统称为监狱。

在大多数系统上,当不执行需要特殊访问的操作时,Varnish父进程现在会将有效权限删除到正常用户模式。

现在,应将Varnish Worker子项作为单独的 vcache 用户。

varnishlogvarnishncsa 和其他Varnish共享日志实用程序现在必须在具有 varnish 组成员身份。

冷热VCL配置

传统上,Varnish有主动和非主动负载VCL的概念。任何加载的VCL都会导致状态被保留,并针对后端运行一组单独的运行状况检查(如果已配置)。

为了避免额外的状态和后端轮询,加载的VCL现在要么是热的,要么是冷的。运行时状态(包括后端计数器)和运行状况检查不存在于冷VCL。

在以下情况下,热VCL将自动设置为冷 vcl_cooldown 几秒钟。

输出自 vcl.list **

varnish> vcl.list
200
available  auto/warm       0 boot
available  auto/warm       0 62f5275f-a937-4df9-9fbb-c12336bdfdb8

单个VCL的状态可以使用 vcl.state 呼入 varnishadm **

vcl.state <configname> <state>
    Force the state of the specified configuration.
    State is any of auto, warm or cold values.

示例::

varnish> vcl.state 62f5275f-a937-4df9-9fbb-c12336bdfdb8 cold
200

varnish> vcl.list
200
available  auto/warm       0 boot
available  auto/cold       0 62f5275f-a937-4df9-9fbb-c12336bdfdb8

VMOD编写器应阅读新的VCL_EVENT系统,以便在VCL转换为COLD时释放不必要的状态(请参见 事件函数 )。

代理协议支持

添加了对代理协议连接的套接字支持。代理在TCP连接上定义了一个简短的前同步码,其中(通常)SSL/TLS终端代理可以用信号通知真实的客户端地址。

这个 -a 启动参数语法已扩展,允许执行以下操作::

$ varnishd -f /etc/varnish/default.vcl -a :6081 -a 127.0.0.1:6086,PROXY

生成的侦听套接字支持PROXY1和PROXY2协议。

对于通过代理套接字传入的连接, client.ipserver.ip 将在代理头/前同步码中包含给Varnish的地址(“真正的”IP)。

新的VCL变量 remote.iplocal.ip 包含本地TCP连接终结点。在非代理连接上,这些设置将与 client.ipserver.ip

在此之后的预期模式是 if (std.port(local.ip) == 80) { } 在……里面 vcl_recv 查看流量是否通过HTTP侦听套接字传入(以便可以为客户端重定向到HTTPS提供服务)。

VMOD后端

在Varnish 4.1之前,后端只能在本机VCL中声明。Varnish 4.0将控制器从VCL转移到VMOD,VMOD现在也可以创建后端。既可以动态创建与VCL相同的后端,也可以创建不一定通过TCP使用HTTP/1来获取资源的后端。更多详细信息请参阅 写一部导演 文件。

后端连接超时

Varnish现在将关闭后端连接,时间为 backend_idle_timeout 几秒钟的不活动时间。

以前,它们被永久保留,后端服务器会关闭连接,而不会被Varnish注意到。在需要这些额外后端连接的下一个流量高峰时,在找到/创建工作的后端连接之前,请求可能会失败多次。

协议支持

客户端对HTTP/0.9的支持已经停止。

更多模块可用

Varnish有一个第三方模块(Vmod)的生态系统。自上一次发布以来,这些都是值得了解的新功能:

Libvmod-saintmode:SAINT模式(“从流量推断健康探测”)在4.0中从Varnish核心中删除,现在作为一个独立的vmod回归。这对于在运行状况探测器检测到故障后端之前检测故障后端非常有用。

Libvmod-xkey:缓存对象的二级散列键,基于Varnish Software编写的hashTwo vmod。允许一次性清除任意对象分组,避免使用BAN无效。也称为缓存密钥或代理密钥支持。

Libvmod-rtStatus:实时统计仪表板。

在ESI请求之间传递数据

一种新的 req_top 标识符在VCL中可用,它是对 req 在顶级ESI请求中。

这对于在主ESI请求和它所导致的任何ESI子请求之间来回传递数据很有用。

其他值得注意的小变化

  • Varnish现在将使用 stale-while-revalidate 在RFC5861中定义,用于设置对象宽限时间。

  • -现在建议在Linux系统上使用smalloc存储,而不是sfile存储。

  • 新的VCL变量 beresp.was_304 已经引入了 vcl_backend_response 。将设置为 true 如果来自后端的响应是条件提取的肯定结果 (304 Not Modified )。