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開始。

相關文章
相關標籤/搜索