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語言,再執(zhí)行。
varnish 4.0開始,每個VCL文件必須在開始行聲明它的版本“vcl 4.0;”
塊(子程序)由大括號分隔,語句用分號結(jié)束。所有的關(guān)鍵字及預(yù)設(shè)子程序名都是全小寫。
注意: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合成響應(yīng)處理。直接修改resp.http對象,而不是obj.http。
9 . 在vcl_backend_error使用beresp對象取代原vcl_error使用obj對象。
10 . 使用beresp.uncacheable創(chuàng)建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已經(jīng)棄用,緩存失效需要從vcl_recv通過return (purge)而不是 purge;
16 . obj全只讀,obj.last_use已經(jīng)棄用。
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關(guān)鍵字已經(jīng)被棄用使用 unset 代替。
20 . X-Forwarded-For設(shè)置移動到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)
數(shù)據(jù)類型:
字符串,布爾值,時間,持續(xù)時間,整數(shù)
設(shè)置變量:
set req.http.User-Agent="test";
刪除變量:
unset req.http.Range;
字符串:?
????使用 "" 符號(不能使用單引號); 直接使用 "" 不能包含換行符,如果是長字符可以使用 {"...."} 可以包含任意字符。
????注意:字符串連接使用 + 操作符。
布爾值:
??? true 或 false
時間:
????VCL自帶時間函數(shù) now 返回的是時間字符串。
持續(xù)時間:
????就是一個時間代號,由數(shù)值和時間范圍組成。
????時間范圍有:
????ms? (毫秒)
????s?? (秒)
????m?? (分鐘)
????h?? (小時)
????d?? (天)
????w?? (周)
????y?? (年)
????
????如: 1.5d? 就表示是 1.5 天
整數(shù),實數(shù):
????VCL允許整數(shù)或?qū)崝?shù)的設(shè)置,但返回時為字符串。
正則表達式:
兼容 PCRE ,使用時要外加引號,前面得使用 ~ 運算符。如:req.http.host ~? "varnish.com$"
引入其它VCL文件:
當配置文件過大,或復(fù)雜時,可以考慮把配置文件拆分成多個vcl文件,然后引入到入口配置文件中,以便管理,如:
include 'public.vcl';
import 加載VMOD模塊:
VCL 自帶很多VMOD模塊,使用前必須加載進來。如:
import std;
sub vcl_recv{
????std.log('success');
}
注釋:
支持 // 或 #? 多行時還可以使用 /* .. */
后端定義:
實際上就是給varnish添加可供訪問的web服務(wù)器,如果有多臺web服務(wù)器時,可添加多個backend塊。
命令:backend。這個定義為最基本的反向入口定義,用于varnish連接對應(yīng)的服務(wù)器,如果沒有定義或定義錯誤則用戶無法訪問正常頁面。
語法格式:
backend?name{.attribute?=?"value"; }說明:backend 是定義后端關(guān)鍵字,name 是當前后端節(jié)點的別名,多個后端節(jié)點時,name 名不能重復(fù),否則覆蓋。花括號里面定義當前節(jié)點相關(guān)的屬性(鍵=值)。除默認節(jié)點外其它節(jié)點定義后必需有調(diào)用,否則varnish無法啟動。后端是否正常可以通過std.healthy(backend)判斷。
屬性列表:
.host="127.0.0.1";????? //要轉(zhuǎn)向主機IP或域名,必填鍵/值對。
.port="8080";??????? //主機連接端口號或協(xié)議名(HTTP等),默認80
.host_header='';??? //請示主機頭追加內(nèi)容
.connect_timeout=1s;???? //等待后端連接的時間
.first_byte_timeout=5s;??? //等待從后端返回的第一個字節(jié)時間
.between_bytes_timeout=2s;???? //每接收一個字節(jié)之間等待時間
.probe=probe_name;??????? //監(jiān)控服務(wù)器訪問狀態(tài),指定外部監(jiān)控name或者內(nèi)部直接添加
.max_connections=200;??? //設(shè)置最大并發(fā)連接數(shù),超過這個數(shù)后連接就會失敗
注意:時間相關(guān)的值可以使用 持續(xù)時間 組成的值,時間與連接數(shù)是限定條件,如果超出條件則會連接失敗,所以沒有特別情況,不推薦使用;監(jiān)控器,是判定服務(wù)器是否正常的組件,可以直接在后端內(nèi)定義或指定外部定義的監(jiān)控name名。
例:(下面兩個例子結(jié)果是一樣的,但第二個例子中更適用于集群,可以方便批量修改)
backend?web{.host="127.0.0.1";.port="8080";.probe={??????????//直接追加監(jiān)控塊.url="/";.timeout=2s;} }或
probe?web_probe{???//監(jiān)控必需定義在前面,否則后端調(diào)用找不到監(jiān)控塊。.url="/";.timeout=2s; }backend?web{.host="127.0.0.1";.port="8080";.probe=web_probe;???//調(diào)用外部共用監(jiān)控塊 }監(jiān)控器(探頭):
命令:probe 。監(jiān)控可以循環(huán)訪問指定的地址,通過響應(yīng)時間判定服務(wù)器是否空閑或正常。這類命令非常適用于集群中某些節(jié)點服務(wù)器崩潰或負載過重,而禁止訪問這臺節(jié)點服務(wù)器。
語法格式:
probe?name{.attribute?=?"value"; }說明:probe 是定義監(jiān)控關(guān)鍵字,name 是當前監(jiān)控點的別名,多個監(jiān)控節(jié)點時,name 名不能重復(fù),否則覆蓋。花括號里面定義當前節(jié)點相關(guān)的屬性(鍵=值)。
沒有必填屬性,因為默認值就可以正常執(zhí)行操作。
屬性列表:
.url="/";??? //指定監(jiān)控入口URL地址,默認為"/"
.request="";?? //指定監(jiān)控請求入口地址,比 .url 優(yōu)先級高。
.expected_response="200";?? //請求響應(yīng)代碼,默認是 200
.timeout=2s;?? //請求超時判斷范圍。
.interval=5s; ??? //每次輪詢請求間隔時間,默認為 5s 。
.initial=-1;???? //初始啟動時以.window輪詢次數(shù)中幾次良好后續(xù)才能使用這個后端服務(wù)器節(jié)點,默認為 -1 ,則輪詢完 .window 所有次數(shù)良好判定為正常。
.window=8;?? //指定多少輪詢次數(shù),用于判定服務(wù)器正常,默認是 8。
.threshold=3;?? //必須多少次輪詢正常才算該后端節(jié)點服務(wù)器正常,默認是 3。
訪問控制列表(ACL):
創(chuàng)建一個地址列表,用于后面的判斷,可以是域名或IP集合。這個可以用于指定某些地址請求入口,防止惡意請求等。
語法格式:
acl?name{"127.0.0.1";"localhost";!"192.168.134.01"; }說明:acl 是訪問列表關(guān)鍵字(必需小寫),name 是該列表的別名用于調(diào)用,花括號內(nèi)部是地址集。
注意:如果列表中包含了無法解析的主機地址,它會匹配任何地址,如果不想讓它匹配所有地址可以在前添加一個 ! 符號,如上面 !"192.168.134.01";
使用ACL只需要用 匹配運算符 ~ 或 !~? 如:
if(client.ip?~?name){return?(pipe); }VCL對象:
vcl對象需要使用new關(guān)鍵字創(chuàng)建,所有可創(chuàng)建對象都是內(nèi)定的,使用前必需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 : 循環(huán)依次逐個選擇后端服務(wù)器。
fallback : 依次選擇第一個正常的后端服務(wù)器。
random : 隨機選擇后端服務(wù)器,可設(shè)置每個后端權(quán)重增加隨機率。
hash :? 通過散列隨機選擇對應(yīng)的后端服務(wù)器且保持選擇對應(yīng)關(guān)系,下次則直接找對應(yīng)的后端服務(wù)器。
注意:random,hash 有權(quán)重值設(shè)置,用于提高隨機率。選中的后端需要設(shè)置到req.backend_hint中。每個后端最好都配置監(jiān)控器(后端服務(wù)器正常監(jiān)測)以便directors自動屏蔽不正常后端而不進入均衡列隊中。vcl_backend_error中最好使用 return(retry); 重試后端動作以便能跨過不正常后端(重試后端次數(shù)受配置值max_retries影響默認為4次)當使用hash均衡模式時還得清除當前緩存否則重試還是原后端服務(wù)器。
round_robin例:
函數(shù)集:
round_robin.add_backend( backend );? 添加后端服務(wù)器節(jié)點,backend 為后端配置別名。
round_robin.backend();? 循環(huán)提取后端節(jié)點
說明:round_robin從請求個數(shù)上均勻的分配后端服務(wù)器,只要處理好后端錯誤能很好避開有問題的后端服務(wù)器。
fallback例:
函數(shù)集:
fallback.add_backend( backend );? 添加后端服務(wù)器節(jié)點,backend 為后端配置別名。
fallback.backend();? 依次提取第一個正常后端節(jié)點。
說明:fallback依次檢查后端節(jié)點返回第一個正常后端節(jié)點(這個檢查是通過后端監(jiān)控器完成的,所以并不能及時找出不正常后端),請求會一直堆積在第一臺正常后端服務(wù)器,給這個節(jié)點造成壓力,只要處理好后端錯誤能很好避開有問題的后端服務(wù)器。
random例:
函數(shù)集:
random.add_backend( backend , real );? 添加后端服務(wù)器節(jié)點,backend 為后端配置別名,real 為權(quán)重值,隨機率計算公式:100 * (當前權(quán)重 / 總權(quán)重)。
random.backend();? 隨機提取后端節(jié)點
說明:隨機選中一臺后端服務(wù)器,只要處理好后端錯誤能很好避開有問題的后端服務(wù)器。
hash例:
函數(shù)集:
hash.add_backend( backend , real );? 添加后端服務(wù)器節(jié)點,backend 為后端配置別名,real 為權(quán)重值,隨機率計算公式:100 * (當前權(quán)重 / 總權(quán)重)。
hash.backend();? 使用hash值提取后端節(jié)點
說明:第一次創(chuàng)建hash鍵值時隨機提取一臺后端服務(wù)器,后續(xù)按對應(yīng)的鍵值直接提取,不能很好的避開壞節(jié)點。
子程序:
子程序是一種類似C的函數(shù),但了程序沒有調(diào)用參數(shù),也沒有返回值,子程序以 sub 關(guān)鍵字定義。在VCL里子程序是用于管理程序。調(diào)用一個子程序使用 call 關(guān)鍵字。
聲明子程序 例:
sub?name{if(client.ip?==?"192.168.134.168"){return?(pipe);} }調(diào)用子程序 例:
sub?vcl_recv{call?name; }注意:所有VCL內(nèi)置的程序都是以 vcl_ 開頭,并已經(jīng)預(yù)置好,在VCL文件中只要聲明對應(yīng)的內(nèi)置子程序,都會在對應(yīng)的流程中調(diào)用。所有自定義的子程序自4.0開始不能以 vcl_ 開頭。子程序數(shù)據(jù)交互只有通過全局變量來傳遞。
return 語句:
return 語句是終止子程序并返回動作,所有動作都根據(jù)不同的vcl子程序限定來選用。
https://www.varnish-cache.org/docs/4.0/users-guide/vcl-built-in-subs.html
語法:return(action);
常用的動作:
abandon? 放棄處理,并生成一個錯誤。
deliver? 交付處理
fetch? 從后端取出響應(yīng)對象
hash? 哈希緩存處理
lookup 查找緩存對象
ok 繼續(xù)執(zhí)行
pass? 進入pass非緩存模式
pipe 進入pipe非緩存模式
purge 清除緩存對象,構(gòu)建響應(yīng)
restart 重新開始
retry 重試后端處理
synth(status code,reason) 合成返回客戶端狀態(tài)信息
預(yù)設(shè)變量:
預(yù)設(shè)變量是系統(tǒng)固定的,請求進入對應(yīng)的vcl子程序后便生成,這些變量可以方便子程序提取,當然也可以自定義一些全局變量。
注:預(yù)設(shè)變量存在讀寫限制,vcl_all 是vcl配置中所有子程序,backend 是后端處理相關(guān)子程序(如vcl_backend_fetch,vcl_backend_response,vcl_backend_error),client請求處理相關(guān)子程序不含后端backend,vcl_init,vcl_fini其它子程序。(未指定讀或?qū)懛秶?#xff0c;則為對應(yīng)操作不存在)。
當前時間:
now
數(shù)據(jù)類型:time
讀:vcl_all
作用:返回當前時間戳,全局可讀但不可寫。
客戶端:(客戶端基本信息)
注:原client.port已經(jīng)棄用,如果要取客戶端請求端口號使用 std.port(client.ip),需要import std;才可以使用std
client.ip
數(shù)據(jù)類型:IP
讀:client
作用:返回客戶端IP地址。
說明:
client.identity
數(shù)據(jù)類型:字符串
讀:client
寫:client
作用:用于裝載客戶端標識碼。
服務(wù)器:(服務(wù)器基本信息)
注:原server.port已經(jīng)棄用,如果要取客戶端請求端口號使用 std.port(server.ip),需要import std;才可以使用std
server.hostname
數(shù)據(jù)類型:字符串
讀:vcl_all
作用:服務(wù)器主機名。
server.identity
數(shù)據(jù)類型:字符串
讀:vcl_all
作用:服務(wù)器身份標識。可由varnishd 啟動的-i 參數(shù)決定,如果沒有設(shè)置-i 則為該實例的名稱(受 -n 參數(shù)影響)。
server.ip
數(shù)據(jù)類型:IP
讀:client
作用:用于裝載客戶端標識碼。
bereq:(發(fā)送到后端的請求對象,基于req對象)
注:bereq可讀寫是隨著對應(yīng)子程序所在處理流程所產(chǎn)生的影響不一樣,比如在vcl_pipe中處理bereq是無法影響到請求后端,因為到vcl_pipe中后端請求已經(jīng)發(fā)送。
bereq
數(shù)據(jù)類型:HTTP
讀:backend
作用:整個后端請求后數(shù)據(jù)結(jié)構(gòu)。
bereq.backend
數(shù)據(jù)類型:backend
讀:backend , vcl_pipe
寫:backend , vcl_pipe
作用:所請求后端節(jié)點配置。
bereq.between_bytes_timeout
數(shù)據(jù)類型:持續(xù)時間
讀:backend
寫:backend
作用:從后端每接收一個字節(jié)之間的等待時間(秒),緩沖接收,(pipe模式無效)。
bereq.connect_timeout
數(shù)據(jù)類型:持續(xù)時間
讀:backend , vcl_pipe
寫:backend , vcl_pipe
作用:連接后端等待時間(秒),最大等待時間。
bereq.first_byte_timeout
數(shù)據(jù)類型:持續(xù)時間
讀:backend
寫:backend
作用:等待后端第一個字節(jié)時間(秒),最大等待時間,(pipe模式無效)。
bereq.http
數(shù)據(jù)類型:header
讀:backend , vcl_pipe
寫:backend , vcl_pipe
作用:對應(yīng)發(fā)送到后端HTTP的header信息。
bereq.method
數(shù)據(jù)類型:string
讀:backend , vcl_pipe
寫:backend , vcl_pipe
作用:發(fā)送到后端的請求類型(如:GET , POST)。
bereq.proto
數(shù)據(jù)類型:string
讀:backend , vcl_pipe
寫:backend , vcl_pipe
作用:發(fā)送到后端的請求的HTTP版本。
bereq.retries
數(shù)據(jù)類型:int
讀:backend
作用:相同請求重試計數(shù)。
bereq.uncacheable
數(shù)據(jù)類型:bool
讀:backend
作用:無緩存這個請求。
bereq.url
數(shù)據(jù)類型:string
讀:backend , vcl_pipe
寫:backend , vcl_pipe
作用:發(fā)送到后端請求的URL。
bereq.xid
數(shù)據(jù)類型:string
讀:backend
作用:請求唯一ID。
beresp:(后端響應(yīng)請求對象)
beresp
數(shù)據(jù)類型:HTTP
讀:vcl_backend_response , vcl_backend_error
作用:整個后端響應(yīng)HTTP數(shù)據(jù)結(jié)構(gòu)。
beresp.backend.ip
數(shù)據(jù)類型:IP
讀:vcl_backend_response , vcl_backend_error
作用:后端響應(yīng)的IP。
beresp.backend.name
數(shù)據(jù)類型:string
讀:vcl_backend_response , vcl_backend_error
作用:響應(yīng)后端配置節(jié)點的name。
beresp.do_esi
數(shù)據(jù)類型:bool
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:默認為 false 。ESI進程狀態(tài)(如果設(shè)置為true 必需在req.esi為true才會生效)。
beresp.do_gunzip
數(shù)據(jù)類型:bool
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:默認為 false 。緩存前解壓該對象
beresp.do_gzip
數(shù)據(jù)類型:bool
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:默認為 false 。緩存前壓縮該對象
beresp.do_stream
數(shù)據(jù)類型:bool
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:將交付給客戶端的內(nèi)容全部提取并存儲在存儲器中(pass 模式不會被存儲)。
beresp.grace
數(shù)據(jù)類型:持續(xù)時間
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:設(shè)置當前對象緩存過期后可額外寬限時間,用于特殊請求加大緩存時間,當并發(fā)量巨大時,不易設(shè)置過大否則會堵塞緩存,一般可設(shè)置 1 m 左右,當beresp.ttl=0s時該值無效。
beresp.http
數(shù)據(jù)類型:header
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:對應(yīng)的HTTP請求header
beresp.keep
數(shù)據(jù)類型:持續(xù)時間
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:對象緩存后帶保持時間(帶條件處理,條件成功使用緩存否則后端刷新數(shù)據(jù)),使用保持必需要后端服務(wù)器發(fā)送客戶端“ Etag”和“Last-Modified”頭信息,客戶端第二次訪問時就會以 “If-None-Match”和“If-Modified-Since”頭信息返回“ Etag”和“Last-Modified”兩個信息,varinsh會對客戶端返回的“If-None-Match”和“If-Modified-Since”進行判斷,如果配置成功返回保持數(shù)據(jù),失敗則取后端新數(shù)據(jù)。
beresp.proto
數(shù)據(jù)類型:string
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:響應(yīng)的HTTP版本
beresp.reason
數(shù)據(jù)類型:string
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:由服務(wù)器返回的HTTP狀態(tài)信息
beresp.status
數(shù)據(jù)類型:int
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:由服務(wù)器返回的狀態(tài)碼
beresp.storage_hint
數(shù)據(jù)類型:string
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:指定保存的特定存儲器
beresp.ttl
數(shù)據(jù)類型:持續(xù)時間
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:該對象緩存的剩余時間,指定統(tǒng)一緩存剩余時間。
beresp.uncacheable
數(shù)據(jù)類型:bool
讀:vcl_backend_response , vcl_backend_error
寫:vcl_backend_response , vcl_backend_error
作用:繼承bereq.uncacheable,是否不緩存
OBJ :(高速緩存對象,緩存后端響應(yīng)請求內(nèi)容,全部只讀)
注:每個緩存對象會有 1k 誤差,即varnish會少算 1k 左右的空間,所以正常設(shè)置緩存空間時不易過大,緩存對象過多時誤差會使varnish占用實際空間超指定空間多倍
obj.grace
數(shù)據(jù)類型:持續(xù)時間
讀:vcl_hit
作用:該對象額外寬限時間
obj.hits
數(shù)據(jù)類型:int
讀:vcl_hit , vcl_deliver
作用:緩存命中次數(shù),計數(shù)器從1開始,當對象緩存該值為1,一般可以用于判斷是否有緩存,當前該值大于0時則為有緩存。
obj.http
數(shù)據(jù)類型:header
讀:vcl_hit
作用:對應(yīng)HTTP的header
obj.keep
數(shù)據(jù)類型:持續(xù)時間
讀:vcl_hit
作用:該對象剩余保持時間
obj.proto
數(shù)據(jù)類型:string
讀:vcl_hit
作用:HTTP版本
obj.reason
數(shù)據(jù)類型:string
讀:vcl_hit
作用:服務(wù)器返回的HTTP狀態(tài)信息
obj.status
數(shù)據(jù)類型:int
讀:vcl_hit
作用:服務(wù)器返回的狀態(tài)碼
obj.ttl
數(shù)據(jù)類型:持續(xù)時間
讀:vcl_hit
作用:該對象緩存剩余時間(秒)
obj.uncacheable
數(shù)據(jù)類型:bool
讀:vcl_deliver
作用:不緩存對象
REQ :(客戶端發(fā)送的請求對象)
req
數(shù)據(jù)類型:http
讀:client
作用:整個HTTP請求數(shù)據(jù)結(jié)構(gòu)
req.backend_hint
數(shù)據(jù)類型:backend
讀:client
寫:client
作用:指定請求后端節(jié)點,設(shè)置后 bereq.backend 才能獲取后端節(jié)點配置數(shù)據(jù)
req.can_gzip
數(shù)據(jù)類型:bool
讀:client
作用:客戶端是否接受GZIP傳輸編碼。
req.esi
數(shù)據(jù)類型:bool
讀:client
寫:client
作用:是否啟用esi處理,默認為true啟用。這個變量在新版本中可能會改變,實際應(yīng)用中避免使用。
req.esi_level
數(shù)據(jù)類型:int
讀:client
作用:esi請求計數(shù)
req.hash_always_miss
數(shù)據(jù)類型:bool
讀:vcl_recv
寫:vcl_recv
作用:是否強制不命中高速緩存,如果設(shè)置為true,則高速緩存不會命中,一直會從后端獲取新數(shù)據(jù)。
req.hash_ignore_busy
數(shù)據(jù)類型:bool
讀:vcl_recv
寫:vcl_recv
作用:忽略緩存中忙碌的對象,多臺緩存時可以避免死鎖。
req.http
數(shù)據(jù)類型:header
讀:client
寫:client
作用:對應(yīng)請求HTTP的header。
req.method
數(shù)據(jù)類型:string
讀:client
寫:client
作用:請求類型(如 GET , POST)。
req.proto
數(shù)據(jù)類型:string
讀:client
寫:client
作用:客戶端使用的HTTP協(xié)議版本。
req.restarts
數(shù)據(jù)類型:int
讀:client
作用:重新啟動次數(shù)。
req.ttl
數(shù)據(jù)類型:持續(xù)時間
讀:client
寫:client
作用:緩存有剩余時間。
req.url
數(shù)據(jù)類型:string
讀:client
寫:client
作用:請求的URL。
req.xid
數(shù)據(jù)類型:string
讀:client
作用:唯一ID。
RESP :(返回給客戶端的響應(yīng)對象)
resp
數(shù)據(jù)類型:HTTP
讀:vcl_deliver , vcl_synth
作用:整個響應(yīng)HTTP數(shù)據(jù)結(jié)構(gòu)。
resp.http
數(shù)據(jù)類型:header
讀:vcl_deliver , vcl_synth
寫:vcl_deliver , vcl_synth
作用:對應(yīng)HTTP的header。
resp.proto
數(shù)據(jù)類型:string
讀:vcl_deliver , vcl_synth
寫:vcl_deliver , vcl_synth
作用:編輯響應(yīng)的HTTP協(xié)議版本。
resp.reason
數(shù)據(jù)類型:string
讀:vcl_deliver , vcl_synth
寫:vcl_deliver , vcl_synth
作用:將要返回的HTTP狀態(tài)信息。
resq.status
數(shù)據(jù)類型:int
讀:vcl_deliver , vcl_synth
寫:vcl_deliver , vcl_synth
作用:將要返回的HTTP狀態(tài)碼。
存儲 :
storage.<name>.free_space
數(shù)據(jù)類型:bytes
讀:client , backend
作用:存儲可用空間(字節(jié)數(shù))。
storage.<name>.used_space
數(shù)據(jù)類型:bytes
讀:client , backend
作用:存儲已經(jīng)使用空間(字節(jié)數(shù))。
storage.<name>.happy
數(shù)據(jù)類型:bool
讀:client , backend
作用:存儲健康狀態(tài)。
特定功能性語句
內(nèi)置特定功能語句,
ban(expression)
清除指定對象緩存
call(subroutine)
調(diào)用子程序,如:call(name);
hash_data(input)
生成hash鍵,用于自定hash鍵值生成結(jié)構(gòu),只能在vcl_hash子程序中使用。調(diào)用 hash_data(input) 后,即這個hash為當前頁面的緩存hash鍵值,無需其它獲取或操作,如:
sub?vcl_hash{hash_data(client.ip);return(lookup); }注意:return(lookup); 是默認返回值,所以可以不寫。
new()
創(chuàng)建一個vcl對象,只能在vcl_init子程序中使用。
return()
結(jié)束當前子程序,并指定繼續(xù)下一步動作,如:return (ok); 每個子程序可指定的動作均有不同。
rollback()
恢復(fù)HTTP頭到原來狀態(tài),已經(jīng)棄用,使用 std.rollback() 代替。
synthetic(STRING)
合成器,用于自定義一個響應(yīng)內(nèi)容,比如當請求出錯時,可以返回自定義 404 內(nèi)容,而不只是默認頭信息,只能在 vcl_synth 與 vcl_backend_error 子程序中使用,如:
sub?vcl_synth?{//自定義內(nèi)容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>這只是一個測試自定義響應(yīng)異常內(nèi)容</h3></body> </html>"});//只交付自定義內(nèi)容return(deliver); }注意:在 vcl_synth 與 vcl_backend_error 子程序中使用 return (deliver); 代表只發(fā)送自定義響應(yīng)內(nèi)容也就是synthetic(string)生成的內(nèi)容;如果沒有自定義內(nèi)容(synthetic)使用了 return(deliver); 則返回客戶端的內(nèi)容為空;如果不使用返回值 return(deliver); 則同時返回自定義內(nèi)容和默認生成的(sysnth(status code,reason)或后端異常)錯誤內(nèi)容,所以在不使用 return(deliver); 時最好不要追加自定義內(nèi)容,否則兩塊內(nèi)容會同時發(fā)送到客戶端,影響頁面效果,自定內(nèi)容會在前面。
regsub(str, regex, sub)
使用正則替換第一次出現(xiàn)的字符串,第一個參數(shù)為待處理字符串,第二個參數(shù)為正則表達式,第三個為替換為字符串。
regsuball(str, regex, sub)
使用正則替換所有匹配字符串。參數(shù)與regsuball相同。
轉(zhuǎn)載于:https://blog.51cto.com/php2012web/1680580
總結(jié)
以上是生活随笔為你收集整理的linux下varnish4配置语法(基础)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【linux高级程序设计】(第十二章)L
- 下一篇: Linux的NTP配置总结(转)