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

VCL Syntax

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

块由大括号分隔,语句用分号结束,注释能够根据本身的喜爱来写为C,C ++或Perl的注释。express

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

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

Strings

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

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

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

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

匹配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开始。

相关文章
相关标签/搜索