varnish 4.0 官方文档翻译13-VCL Syntax

戏子无情 提交于 2019-11-29 22:30:50

VCL Syntax

varnish从C继承了很多,同时它读起来像简单的C或者是Perl。

块由大括号分隔,语句用分号结束,注释可以根据自己的喜好来写为C,C ++或Perl的注释。

注意VCL不包含任何循环和跳转语句。

本节提供大致最重要部分的语法。完整的VCL语法文档请查看https://www.varnish-cache.org/docs/4.0/reference/vcl.html#reference-vcl

Strings

基本的字符是被双引号引起来,像"...",同时不可以跨行。 反斜杠不是特别的,例如regsub你不需要对\进行转义:

regsub("barf", "(b)(a)(r)(f)", "\4\3\2p") -> "frap"

长字符应该被{"..."}。它们可以包含任何字符包括"、跨行、除了NUL(0×00)字符等控制字符。如果你真的想字符串中使用NUL字符,VMOD,使得它可以创建这样的字符串。

Access control lists (ACLs)

ACL申明创建和初始化一个权限控制列表,通常用来匹配客户端地址:

acl local {
    "localhost";         // myself
    "192.0.2.0"/24;      // and everyone on the local network
    ! "192.0.2.23";      // except for the dialin router
}

如果ACL条目指定了varnish无法解析的主机名,它会匹配任何和它相比的地址。因此,如果它前面有一个否定标记,它将拒绝任何和它相比的地址,这可能和你想的不一致。如果该条目括号的,它将简单地被忽略。

匹配ip地址,使用VCL,简单的使用匹配操作:

if (client.ip ~ local) {
    return (pipe);
}

Operators

下面这些操作时可以在VCL中使用的,查看例子来进一步了解这些操作。

=
Assignment operator.赋值操作
==
Comparison.比较
~
Match. Can either be used with regular expressions or ACLs.匹配操作,可以使用正则或者ACLs
!
Negation.非
&&
Logical and 逻辑与
||
Logical or  逻辑或

Subroutines

子程序可以让一段代码易读的同时可以重用代码。

sub pipe_if_local {
  if (client.ip ~ local) {
    return (pipe);
  }
}

在VCL的子程序,不能引入参数,也不会返回值

调用子程序,使用call关键字,后面跟上被调用的子程序的名字:

call pipe_if_local;

varnish已经有了一些内建的子程序,当请求流通过varnish时将会调用这些内建的子程序。这些所有的内建子程序被命名成vcl.* 你自己编写的子程序不能以vcl开始。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!