日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下varnish4配置语法(基础)

發布時間:2025/1/21 linux 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下varnish4配置语法(基础) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

varnish4 安裝可以查看:http://php2012web.blog.51cto.com/5585213/1640182

VCL 說明文檔:https://www.varnish-cache.org/docs/4.0/reference/vcl.html


varnish 配置基本上是編輯 VCL 文件,varnish 有一套自定義 VCL 語法,啟動時,會將配置文件編譯為C語言,再執行。


varnish 4.0開始,每個VCL文件必須在開始行聲明它的版本“vcl 4.0;”

塊(子程序)由大括號分隔,語句用分號結束。所有的關鍵字及預設子程序名都是全小寫。


注意:4.0與3.0有部分變更,也就是配置文件有不兼容點。
https://www.varnish-cache.org/docs/4.0/whats-new/upgrading.html

1 . 配置文件必需要版本聲明,如: vcl 4.0;

2 . 原req.request改為req.method

3 . 原vcl_fetch改變vcl_backend_response

4 . 原directors移到vmod_directors

5 . hash作為director,director已被刪除

6 . vcl_error改為vcl_backend_error

7 . error code [reason] 改為 synth( code [,reason] )

8 . vcl_synth合成響應處理。直接修改resp.http對象,而不是obj.http。

9 . 在vcl_backend_error使用beresp對象取代原vcl_error使用obj對象。

10 . 使用beresp.uncacheable創建hit_for_pass對象。如:

sub?vcl_backend_response?{if?(beresp.http.X-No-Cache)?{set?beresp.uncacheable?=?true;set?beresp.ttl?=?120s;return?(deliver);} }

11 . req在vcl_backend_response不可使用;原vcl_fetch可用,但變更后只能在vcl_backend_response使用bereq。

12 . 任何自定義的子程序不能使用 vcl_* 命令方式。

13 .? req.backend.healthy使用方法換成std.healthy(req.backend_hint),并且還得import std模塊。

14 . client.port和server.port分別使用方法改成 std.port(client.ip)和std.port(server.ip)。

15 . purge已經棄用,緩存失效需要從vcl_recv通過return (purge)而不是 purge;

16 . obj全只讀,obj.last_use已經棄用。

17 . 返回值變更:(除 synth(code[,reason]) 外)

????? vcl_recv? 使用 return hash 代替 return lookup

????? vcl_hash 使用 return lookup 代替 return hash

????? vcl_pass 使用 return fetch 代替 return pass

18 . 原后端重啟(return (restart))改為重試(return(retry))并且進入vcl_backend_fetch處理。

19 . remove關鍵字已經被棄用使用 unset 代替。

20 . X-Forwarded-For設置移動到vcl_recv之前處理。

21 . session_linger改名為timeout_linger 并且時間單位為 秒(原來是毫秒)。

22 . sess_timeout改名為timeout_idle。

23 . sess_workspace棄用。

24 . thread_pool_purge_delay改名為thread_pool_destroy_delay 并且單位為 秒 (原來是毫秒)。

25 . thread_pool_add_delay和thread_pool_fail_delay時間單位勻改為 秒 (原來是毫秒)。


支持運算符:


=?? (賦值運算)


==? (相等比較)


~??? (匹配,可以使用正則表達式,或訪問控制列表)


!~??? (不匹配,可以使用正則表達式,或訪問控制列表)


!? (非)


&&?? (邏輯與)


||?? (邏輯或)


條件語句:


if 和 else

允許使用多層條件 elseif (elseif|elsif|elif|else if 都可以代表elseif)



數據類型:


字符串,布爾值,時間,持續時間,整數


設置變量:

set req.http.User-Agent="test";

刪除變量:

unset req.http.Range;


字符串:?

????使用 "" 符號(不能使用單引號); 直接使用 "" 不能包含換行符,如果是長字符可以使用 {"...."} 可以包含任意字符。

????注意:字符串連接使用 + 操作符。


布爾值:

??? true 或 false


時間:

????VCL自帶時間函數 now 返回的是時間字符串。


持續時間:

????就是一個時間代號,由數值和時間范圍組成。

????時間范圍有:

????ms? (毫秒)

????s?? (秒)

????m?? (分鐘)

????h?? (小時)

????d?? (天)

????w?? (周)

????y?? (年)

????

????如: 1.5d? 就表示是 1.5 天


整數,實數:

????VCL允許整數或實數的設置,但返回時為字符串。


正則表達式:


兼容 PCRE ,使用時要外加引號,前面得使用 ~ 運算符。如:req.http.host ~? "varnish.com$"


引入其它VCL文件:

當配置文件過大,或復雜時,可以考慮把配置文件拆分成多個vcl文件,然后引入到入口配置文件中,以便管理,如:

include 'public.vcl';


import 加載VMOD模塊:


VCL 自帶很多VMOD模塊,使用前必須加載進來。如:

import std;

sub vcl_recv{

????std.log('success');

}


注釋:


支持 // 或 #? 多行時還可以使用 /* .. */


后端定義:

實際上就是給varnish添加可供訪問的web服務器,如果有多臺web服務器時,可添加多個backend塊。

命令:backend。這個定義為最基本的反向入口定義,用于varnish連接對應的服務器,如果沒有定義或定義錯誤則用戶無法訪問正常頁面。

語法格式:

backend?name{.attribute?=?"value"; }

說明:backend 是定義后端關鍵字,name 是當前后端節點的別名,多個后端節點時,name 名不能重復,否則覆蓋。花括號里面定義當前節點相關的屬性(鍵=值)。除默認節點外其它節點定義后必需有調用,否則varnish無法啟動。后端是否正常可以通過std.healthy(backend)判斷。

屬性列表:


.host="127.0.0.1";????? //要轉向主機IP或域名,必填鍵/值對。


.port="8080";??????? //主機連接端口號或協議名(HTTP等),默認80


.host_header='';??? //請示主機頭追加內容


.connect_timeout=1s;???? //等待后端連接的時間


.first_byte_timeout=5s;??? //等待從后端返回的第一個字節時間


.between_bytes_timeout=2s;???? //每接收一個字節之間等待時間


.probe=probe_name;??????? //監控服務器訪問狀態,指定外部監控name或者內部直接添加


.max_connections=200;??? //設置最大并發連接數,超過這個數后連接就會失敗


注意:時間相關的值可以使用 持續時間 組成的值,時間與連接數是限定條件,如果超出條件則會連接失敗,所以沒有特別情況,不推薦使用;監控器,是判定服務器是否正常的組件,可以直接在后端內定義或指定外部定義的監控name名。

例:(下面兩個例子結果是一樣的,但第二個例子中更適用于集群,可以方便批量修改)

backend?web{.host="127.0.0.1";.port="8080";.probe={??????????//直接追加監控塊.url="/";.timeout=2s;} }

probe?web_probe{???//監控必需定義在前面,否則后端調用找不到監控塊。.url="/";.timeout=2s; }backend?web{.host="127.0.0.1";.port="8080";.probe=web_probe;???//調用外部共用監控塊 }


監控器(探頭):


命令:probe 。監控可以循環訪問指定的地址,通過響應時間判定服務器是否空閑或正常。這類命令非常適用于集群中某些節點服務器崩潰或負載過重,而禁止訪問這臺節點服務器。

語法格式:

probe?name{.attribute?=?"value"; }

說明:probe 是定義監控關鍵字,name 是當前監控點的別名,多個監控節點時,name 名不能重復,否則覆蓋。花括號里面定義當前節點相關的屬性(鍵=值)。

沒有必填屬性,因為默認值就可以正常執行操作。

屬性列表:


.url="/";??? //指定監控入口URL地址,默認為"/"


.request="";?? //指定監控請求入口地址,比 .url 優先級高。


.expected_response="200";?? //請求響應代碼,默認是 200


.timeout=2s;?? //請求超時判斷范圍。


.interval=5s; ??? //每次輪詢請求間隔時間,默認為 5s 。


.initial=-1;???? //初始啟動時以.window輪詢次數中幾次良好后續才能使用這個后端服務器節點,默認為 -1 ,則輪詢完 .window 所有次數良好判定為正常。


.window=8;?? //指定多少輪詢次數,用于判定服務器正常,默認是 8。


.threshold=3;?? //必須多少次輪詢正常才算該后端節點服務器正常,默認是 3。



訪問控制列表(ACL):


創建一個地址列表,用于后面的判斷,可以是域名或IP集合。這個可以用于指定某些地址請求入口,防止惡意請求等。

語法格式:

acl?name{"127.0.0.1";"localhost";!"192.168.134.01"; }

說明:acl 是訪問列表關鍵字(必需小寫),name 是該列表的別名用于調用,花括號內部是地址集。

注意:如果列表中包含了無法解析的主機地址,它會匹配任何地址,如果不想讓它匹配所有地址可以在前添加一個 ! 符號,如上面 !"192.168.134.01";

使用ACL只需要用 匹配運算符 ~ 或 !~? 如:

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


VCL對象:


vcl對象需要使用new關鍵字創建,所有可創建對象都是內定的,使用前必需import,所有new操作只能在vcl_init子程序中。

例:

sub?vcl_init?{new?b?=?directors.round_robin()b.add_backend(node1); }


集群負載均衡directors:

directors是varnish負載均衡模塊,使用前必需引入directors模塊,directors模塊包含:round_robin,fallback,random,hash四個對象即四種負載均衡模式。

round_robin : 循環依次逐個選擇后端服務器。

fallback : 依次選擇第一個正常的后端服務器。

random : 隨機選擇后端服務器,可設置每個后端權重增加隨機率。

hash :? 通過散列隨機選擇對應的后端服務器且保持選擇對應關系,下次則直接找對應的后端服務器。


注意:random,hash 有權重值設置,用于提高隨機率。選中的后端需要設置到req.backend_hint中。每個后端最好都配置監控器(后端服務器正常監測)以便directors自動屏蔽不正常后端而不進入均衡列隊中。vcl_backend_error中最好使用 return(retry); 重試后端動作以便能跨過不正常后端(重試后端次數受配置值max_retries影響默認為4次)當使用hash均衡模式時還得清除當前緩存否則重試還是原后端服務器。


round_robin例:

函數集:

round_robin.add_backend( backend );? 添加后端服務器節點,backend 為后端配置別名。

round_robin.backend();? 循環提取后端節點

說明:round_robin從請求個數上均勻的分配后端服務器,只要處理好后端錯誤能很好避開有問題的后端服務器

import?directors;//初始化處理 sub?vcl_init{new?vdir=directors.round_robin();?//創建對象vdir.add_backend(web1);???????????//添加后端服務器節點vdir.add_backend(web2); } //開始處理請求 sub?vcl_recv{set?req.backend_hint=vdir.backend();//選取后端 }


fallback例:

函數集:

fallback.add_backend( backend );? 添加后端服務器節點,backend 為后端配置別名。

fallback.backend();? 依次提取第一個正常后端節點。

說明:fallback依次檢查后端節點返回第一個正常后端節點(這個檢查是通過后端監控器完成的,所以并不能及時找出不正常后端),請求會一直堆積在第一臺正常后端服務器,給這個節點造成壓力,只要處理好后端錯誤能很好避開有問題的后端服務器

import?directors;//初始化處理 sub?vcl_init{new?vdir=directors.fallback();????//創建對象vdir.add_backend(web1);???????????//添加后端服務器節點vdir.add_backend(web2); } //開始處理請求 sub?vcl_recv{set?req.backend_hint=vdir.backend();//選取后端 }


random例:

函數集:

random.add_backend( backend , real );? 添加后端服務器節點,backend 為后端配置別名,real 為權重值,隨機率計算公式:100 * (當前權重 / 總權重)。

random.backend();? 隨機提取后端節點

說明:隨機選中一臺后端服務器,只要處理好后端錯誤能很好避開有問題的后端服務器。

import?directors;//初始化處理 sub?vcl_init{new?vdir=directors.random();?//創建對象vdir.add_backend(web1,5);????//添加后端服務器節點,并且設置高權重值。vdir.add_backend(web2,2);????//添加后端服務器節點,并且設置低權重值。 } //開始處理請求 sub?vcl_recv{set?req.backend_hint=vdir.backend();//選取后端 }


hash例:

函數集:

hash.add_backend( backend , real );? 添加后端服務器節點,backend 為后端配置別名,real 為權重值,隨機率計算公式:100 * (當前權重 / 總權重)。

hash.backend();? 使用hash值提取后端節點

說明:第一次創建hash鍵值時隨機提取一臺后端服務器,后續按對應的鍵值直接提取,不能很好的避開壞節點。

import?directors;//初始化處理 sub?vcl_init{new?vdir=directors.hash();?//創建對象vdir.add_backend(web1,5);????//添加后端服務器節點,并且設置高權重值。vdir.add_backend(web2,2);????//添加后端服務器節點,并且設置低權重值。 } //開始處理請求 sub?vcl_recv{set?req.backend_hint=vdir.backend(req.url);//以請求地址為hash選取后端 }




子程序:


子程序是一種類似C的函數,但了程序沒有調用參數,也沒有返回值,子程序以 sub 關鍵字定義。在VCL里子程序是用于管理程序。調用一個子程序使用 call 關鍵字。


聲明子程序 例:

sub?name{if(client.ip?==?"192.168.134.168"){return?(pipe);} }

調用子程序 例:

sub?vcl_recv{call?name; }

注意:所有VCL內置的程序都是以 vcl_ 開頭,并已經預置好,在VCL文件中只要聲明對應的內置子程序,都會在對應的流程中調用。所有自定義的子程序自4.0開始不能以 vcl_ 開頭。子程序數據交互只有通過全局變量來傳遞。


return 語句:

return 語句是終止子程序并返回動作,所有動作都根據不同的vcl子程序限定來選用

https://www.varnish-cache.org/docs/4.0/users-guide/vcl-built-in-subs.html

語法:return(action);

常用的動作:

  • abandon? 放棄處理,并生成一個錯誤。

  • deliver? 交付處理

  • fetch? 從后端取出響應對象

  • hash? 哈希緩存處理

  • lookup 查找緩存對象

  • ok 繼續執行

  • pass? 進入pass非緩存模式

  • pipe 進入pipe非緩存模式

  • purge 清除緩存對象,構建響應

  • restart 重新開始

  • retry 重試后端處理

  • synth(status code,reason) 合成返回客戶端狀態信息



  • 預設變量:

    預設變量是系統固定的,請求進入對應的vcl子程序后便生成,這些變量可以方便子程序提取,當然也可以自定義一些全局變量。

    注:預設變量存在讀寫限制,vcl_all 是vcl配置中所有子程序,backend 是后端處理相關子程序(如vcl_backend_fetch,vcl_backend_response,vcl_backend_error),client請求處理相關子程序不含后端backend,vcl_init,vcl_fini其它子程序。(未指定讀或寫范圍,則為對應操作不存在)。

    當前時間:

    now

    數據類型:time

    讀:vcl_all

    作用:返回當前時間戳,全局可讀但不可寫。


    客戶端:(客戶端基本信息)

    注:原client.port已經棄用,如果要取客戶端請求端口號使用 std.port(client.ip),需要import std;才可以使用std

    client.ip

    數據類型:IP

    讀:client

    作用:返回客戶端IP地址。

    說明:


    client.identity

    數據類型:字符串

    讀:client

    寫:client

    作用:用于裝載客戶端標識碼。


    服務器:(服務器基本信息)

    注:原server.port已經棄用,如果要取客戶端請求端口號使用 std.port(server.ip),需要import std;才可以使用std

    server.hostname

    數據類型:字符串

    讀:vcl_all

    作用:服務器主機名。


    server.identity

    數據類型:字符串

    讀:vcl_all

    作用:服務器身份標識。可由varnishd 啟動的-i 參數決定,如果沒有設置-i 則為該實例的名稱(受 -n 參數影響)。


    server.ip

    數據類型:IP

    讀:client

    作用:用于裝載客戶端標識碼。


    bereq:(發送到后端的請求對象,基于req對象)

    注:bereq可讀寫是隨著對應子程序所在處理流程所產生的影響不一樣,比如在vcl_pipe中處理bereq是無法影響到請求后端,因為到vcl_pipe中后端請求已經發送。

    bereq

    數據類型:HTTP

    讀:backend

    作用:整個后端請求后數據結構。


    bereq.backend

    數據類型:backend

    讀:backend , vcl_pipe

    寫:backend , vcl_pipe

    作用:所請求后端節點配置。


    bereq.between_bytes_timeout

    數據類型:持續時間

    讀:backend

    寫:backend

    作用:從后端每接收一個字節之間的等待時間(秒),緩沖接收,(pipe模式無效)


    bereq.connect_timeout

    數據類型:持續時間

    讀:backend , vcl_pipe

    寫:backend , vcl_pipe

    作用:連接后端等待時間(秒),最大等待時間。


    bereq.first_byte_timeout

    數據類型:持續時間

    讀:backend

    寫:backend

    作用:等待后端第一個字節時間(秒),最大等待時間,(pipe模式無效)


    bereq.http

    數據類型:header

    讀:backend , vcl_pipe

    寫:backend , vcl_pipe

    作用:對應發送到后端HTTP的header信息。


    bereq.method

    數據類型:string

    讀:backend , vcl_pipe

    寫:backend , vcl_pipe

    作用:發送到后端的請求類型(如:GET , POST)。


    bereq.proto

    數據類型:string

    讀:backend , vcl_pipe

    寫:backend , vcl_pipe

    作用:發送到后端的請求的HTTP版本。


    bereq.retries

    數據類型:int

    讀:backend

    作用:相同請求重試計數。


    bereq.uncacheable

    數據類型:bool

    讀:backend

    作用:無緩存這個請求。


    bereq.url

    數據類型:string

    讀:backend , vcl_pipe

    寫:backend , vcl_pipe

    作用:發送到后端請求的URL。


    bereq.xid

    數據類型:string

    讀:backend

    作用:請求唯一ID。


    beresp:(后端響應請求對象)

    beresp

    數據類型:HTTP

    讀:vcl_backend_response , vcl_backend_error

    作用:整個后端響應HTTP數據結構。


    beresp.backend.ip

    數據類型:IP

    讀:vcl_backend_response , vcl_backend_error

    作用:后端響應的IP。


    beresp.backend.name

    數據類型:string

    讀:vcl_backend_response , vcl_backend_error

    作用:響應后端配置節點的name。


    beresp.do_esi

    數據類型:bool

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:默認為 false 。ESI進程狀態(如果設置為true 必需在req.esi為true才會生效)。


    beresp.do_gunzip

    數據類型:bool

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:默認為 false 。緩存前解壓該對象


    beresp.do_gzip

    數據類型:bool

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:默認為 false 。緩存前壓縮該對象


    beresp.do_stream

    數據類型:bool

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:將交付給客戶端的內容全部提取并存儲在存儲器中(pass 模式不會被存儲)。


    beresp.grace

    數據類型:持續時間

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:設置當前對象緩存過期后可額外寬限時間,用于特殊請求加大緩存時間,當并發量巨大時,不易設置過大否則會堵塞緩存,一般可設置 1 m 左右,當beresp.ttl=0s時該值無效。


    beresp.http

    數據類型:header

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:對應的HTTP請求header


    beresp.keep

    數據類型:持續時間

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:對象緩存后帶保持時間(帶條件處理,條件成功使用緩存否則后端刷新數據),使用保持必需要后端服務器發送客戶端“ Etag”和“Last-Modified”頭信息,客戶端第二次訪問時就會以 “If-None-Match”和“If-Modified-Since”頭信息返回“ Etag”和“Last-Modified”兩個信息,varinsh會對客戶端返回的“If-None-Match”和“If-Modified-Since”進行判斷,如果配置成功返回保持數據,失敗則取后端新數據


    beresp.proto

    數據類型:string

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:響應的HTTP版本


    beresp.reason

    數據類型:string

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:由服務器返回的HTTP狀態信息


    beresp.status

    數據類型:int

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:由服務器返回的狀態碼


    beresp.storage_hint

    數據類型:string

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:指定保存的特定存儲器


    beresp.ttl

    數據類型:持續時間

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:該對象緩存的剩余時間,指定統一緩存剩余時間。


    beresp.uncacheable

    數據類型:bool

    讀:vcl_backend_response , vcl_backend_error

    寫:vcl_backend_response , vcl_backend_error

    作用:繼承bereq.uncacheable,是否不緩存


    OBJ :(高速緩存對象,緩存后端響應請求內容,全部只讀)

    注:每個緩存對象會有 1k 誤差,即varnish會少算 1k 左右的空間,所以正常設置緩存空間時不易過大,緩存對象過多時誤差會使varnish占用實際空間超指定空間多倍

    obj.grace

    數據類型:持續時間

    讀:vcl_hit

    作用:該對象額外寬限時間


    obj.hits

    數據類型:int

    讀:vcl_hit , vcl_deliver

    作用:緩存命中次數,計數器從1開始,當對象緩存該值為1,一般可以用于判斷是否有緩存,當前該值大于0時則為有緩存。


    obj.http

    數據類型:header

    讀:vcl_hit

    作用:對應HTTP的header


    obj.keep

    數據類型:持續時間

    讀:vcl_hit

    作用:該對象剩余保持時間


    obj.proto

    數據類型:string

    讀:vcl_hit

    作用:HTTP版本


    obj.reason

    數據類型:string

    讀:vcl_hit

    作用:服務器返回的HTTP狀態信息


    obj.status

    數據類型:int

    讀:vcl_hit

    作用:服務器返回的狀態碼


    obj.ttl

    數據類型:持續時間

    讀:vcl_hit

    作用:該對象緩存剩余時間(秒)


    obj.uncacheable

    數據類型:bool

    讀:vcl_deliver

    作用:不緩存對象


    REQ :(客戶端發送的請求對象)

    req

    數據類型:http

    讀:client

    作用:整個HTTP請求數據結構


    req.backend_hint

    數據類型:backend

    讀:client

    寫:client

    作用:指定請求后端節點,設置后 bereq.backend 才能獲取后端節點配置數據


    req.can_gzip

    數據類型:bool

    讀:client

    作用:客戶端是否接受GZIP傳輸編碼。


    req.esi

    數據類型:bool

    讀:client

    寫:client

    作用:是否啟用esi處理,默認為true啟用。這個變量在新版本中可能會改變,實際應用中避免使用。


    req.esi_level

    數據類型:int

    讀:client

    作用:esi請求計數


    req.hash_always_miss

    數據類型:bool

    讀:vcl_recv

    寫:vcl_recv

    作用:是否強制不命中高速緩存,如果設置為true,則高速緩存不會命中,一直會從后端獲取新數據。


    req.hash_ignore_busy

    數據類型:bool

    讀:vcl_recv

    寫:vcl_recv

    作用:忽略緩存中忙碌的對象,多臺緩存時可以避免死鎖。


    req.http

    數據類型:header

    讀:client

    寫:client

    作用:對應請求HTTP的header。


    req.method

    數據類型:string

    讀:client

    寫:client

    作用:請求類型(如 GET , POST)。


    req.proto

    數據類型:string

    讀:client

    寫:client

    作用:客戶端使用的HTTP協議版本。


    req.restarts

    數據類型:int

    讀:client

    作用:重新啟動次數。


    req.ttl

    數據類型:持續時間

    讀:client

    寫:client

    作用:緩存有剩余時間。


    req.url

    數據類型:string

    讀:client

    寫:client

    作用:請求的URL。


    req.xid

    數據類型:string

    讀:client

    作用:唯一ID。


    RESP :(返回給客戶端的響應對象)

    resp

    數據類型:HTTP

    讀:vcl_deliver , vcl_synth

    作用:整個響應HTTP數據結構。


    resp.http

    數據類型:header

    讀:vcl_deliver , vcl_synth

    寫:vcl_deliver , vcl_synth

    作用:對應HTTP的header。


    resp.proto

    數據類型:string

    讀:vcl_deliver , vcl_synth

    寫:vcl_deliver , vcl_synth

    作用:編輯響應的HTTP協議版本。


    resp.reason

    數據類型:string

    讀:vcl_deliver , vcl_synth

    寫:vcl_deliver , vcl_synth

    作用:將要返回的HTTP狀態信息。


    resq.status

    數據類型:int

    讀:vcl_deliver , vcl_synth

    寫:vcl_deliver , vcl_synth

    作用:將要返回的HTTP狀態碼。


    存儲 :

    storage.<name>.free_space

    數據類型:bytes

    讀:client , backend

    作用:存儲可用空間(字節數)。


    storage.<name>.used_space

    數據類型:bytes

    讀:client , backend

    作用:存儲已經使用空間(字節數)。


    storage.<name>.happy

    數據類型:bool

    讀:client , backend

    作用:存儲健康狀態。


    特定功能性語句

    內置特定功能語句,

    ban(expression)

    清除指定對象緩存


    call(subroutine)

    調用子程序,如:call(name);


    hash_data(input)

    生成hash鍵,用于自定hash鍵值生成結構,只能在vcl_hash子程序中使用。調用 hash_data(input) 后,即這個hash為當前頁面的緩存hash鍵值,無需其它獲取或操作,如:

    sub?vcl_hash{hash_data(client.ip);return(lookup); }

    注意:return(lookup); 是默認返回值,所以可以不寫。


    new()

    創建一個vcl對象,只能在vcl_init子程序中使用。


    return()

    結束當前子程序,并指定繼續下一步動作,如:return (ok); 每個子程序可指定的動作均有不同。


    rollback()

    恢復HTTP頭到原來狀態,已經棄用,使用 std.rollback() 代替。


    synthetic(STRING)

    合成器,用于自定義一個響應內容,比如當請求出錯時,可以返回自定義 404 內容,而不只是默認頭信息,只能在 vcl_synth 與 vcl_backend_error 子程序中使用,如:

    sub?vcl_synth?{//自定義內容synthetic?({" <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"> <html?lang="zh-cn"><head><meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"/><title>error</title></head><body><h1>Error</h1><h3>這只是一個測試自定義響應異常內容</h3></body> </html>"});//只交付自定義內容return(deliver); }

    注意:在 vcl_synthvcl_backend_error 子程序中使用 return (deliver); 代表只發送自定義響應內容也就是synthetic(string)生成的內容;如果沒有自定義內容(synthetic)使用了 return(deliver); 則返回客戶端的內容為空;如果不使用返回值 return(deliver); 則同時返回自定義內容和默認生成的(sysnth(status code,reason)或后端異常)錯誤內容,所以在不使用 return(deliver); 時最好不要追加自定義內容,否則兩塊內容會同時發送到客戶端,影響頁面效果,自定內容會在前面。


    regsub(str, regex, sub)

    使用正則替換第一次出現的字符串,第一個參數為待處理字符串,第二個參數為正則表達式,第三個為替換為字符串。


    regsuball(str, regex, sub)

    使用正則替換所有匹配字符串。參數與regsuball相同。





    轉載于:https://blog.51cto.com/php2012web/1680580

    總結

    以上是生活随笔為你收集整理的linux下varnish4配置语法(基础)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。