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從請求個數上均勻的分配后端服務器,只要處理好后端錯誤能很好避開有問題的后端服務器。
fallback例:
函數集:
fallback.add_backend( backend );? 添加后端服務器節點,backend 為后端配置別名。
fallback.backend();? 依次提取第一個正常后端節點。
說明:fallback依次檢查后端節點返回第一個正常后端節點(這個檢查是通過后端監控器完成的,所以并不能及時找出不正常后端),請求會一直堆積在第一臺正常后端服務器,給這個節點造成壓力,只要處理好后端錯誤能很好避開有問題的后端服務器。
random例:
函數集:
random.add_backend( backend , real );? 添加后端服務器節點,backend 為后端配置別名,real 為權重值,隨機率計算公式:100 * (當前權重 / 總權重)。
random.backend();? 隨機提取后端節點
說明:隨機選中一臺后端服務器,只要處理好后端錯誤能很好避開有問題的后端服務器。
hash例:
函數集:
hash.add_backend( backend , real );? 添加后端服務器節點,backend 為后端配置別名,real 為權重值,隨機率計算公式:100 * (當前權重 / 總權重)。
hash.backend();? 使用hash值提取后端節點
說明:第一次創建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_synth 與 vcl_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配置语法(基础)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【linux高级程序设计】(第十二章)L
- 下一篇: bpl