varnish配置主要分爲:後端配置,ACL配置,probes配置,directors配置,核心子程序配置幾大塊。其中後端配置是必要的,在多臺服務器中還會用到directors配置,核心子程序配置。php
後端配置:即給varnish添加反代服務器節點,最少配置一個。web
ACL配置:即給varnish添加訪問控制列表,能夠指定這些列表訪問或禁止訪問。後端
probes配置:即給varnish添加探測後端服務器是否正常的規則,方便切換或禁止對應後端服務器。緩存
directors配置:即給varnish添加負載均衡模式管理多個後端服務器。服務器
核心子程序配置:即給varnish添加後端服務器切換,請求緩存,訪問控制,錯誤處理等規則。cookie
varnish基本語法 http://php2012web.blog.51cto.com/5585213/1680580負載均衡
varnish中內置子程序有:ide
注:varnish內置子程序均有本身限定的返回動做 return (動做); 不一樣的動做將調用對應下一個子程序。
fetch
vcl_recvspa
開始處理請求,經過 return (動做); 選擇varnish處理模式,默認進入hash緩存模式(即return(hash);),緩存時間爲配置項default_ttl(默認爲 120秒)過時保持時間default_grace(默認爲10秒)。該子程序通常用於模式選擇,請求對象緩存及信息修改,後端節點修改,終止請求等操做。
可操做對象:(部分或所有值)
讀:client,server,req,storage
寫:client,req
返回值:
synth(status code,reason); 定義響應內容。
pass 進入pass模式,並進入vcl_pass子程序。
pipe 進入pipe模式,並進入vcl_pipe子程序。
hash 進入hash緩存模式,並進入vcl_hash子程序,默認返回值。
purge 清除緩存等數據,子程序先從vcl_hash再到vcl_purge。
vcl_pipe
pipe模式處理,該模式主要用於直接取後端響應內容返回客戶端,可定義響應內容返回客戶端。該子程序通常用於須要及時且不做處理的後端信息,取出後端響應內容後直接交付到客戶端不進入vcl_deliver子程序處理。
可操做對象:(部分或所有值)
讀:client,server,bereq,req,storage
寫:client,bereq,req
返回值:
synth(status code,reason); 定義響應內容。
pipe 繼續pipe模式,進入後端vcl_backend_fetch子程序,默認返回值。
vcl_pass
pass模式處理,該模式相似hash緩存模式,僅不作緩存處理。
可操做對象:(部分或所有值)
讀:client,server,req,storage
寫:client,req
返回值:
synth(status code,reason); 定義響應內容。
fetch 繼續pass模式,進入後端vcl_backend_fetch子程序,默認返回值。
vcl_hit
hash緩存模式時存在hash緩存時調用,用於緩存處理,可放棄或修改緩存。
可操做對象:(部分或所有值)
讀:client,server,obj,req,storage
寫:client,req
返回值:
restart 重啓請求。
deliver 交付緩存內容,進入vcl_deliver子程序處理,默認返回值。
synth(status code,reason); 定義響應內容。
vcl_miss
hash緩存模式時不存在hash緩存時調用,用於判斷性的選擇進入後端取響應內容,能夠修改成pass模式。
可操做對象:(部分或所有值)
讀:client,server,req,storage
寫:client,req
返回值:
restart 重啓請求。
synth(status code,reason); 定義響應內容。
pass 切換到pass模式,進入vcl_pass子程序。
fetch 正常取後端內容再緩存,進入vcl_backend_fetch子程序,默認返回值。
vcl_hash
hash緩存模式,生成hash值做爲緩存查找鍵名提取緩存內容,主要用於緩存hash鍵值處理,可以使用hash_data(string) 指定鍵值組成結構,可在同一個頁面經過IP或cookie生成不一樣的緩存鍵值。
可操做對象:(部分或所有值)
讀:client,server,req,storage
寫:client,req
返回值:
lookup 查找緩存對象,存在緩存進入vcl_hit子程序,不存在緩存進入vcl_miss子程序,當使用了purge清理模式時會進入vcl_purge子程序,默認返回值。
vcl_purge
清理模式,當查找到對應的緩存時清除並調用,用於請求方法清除緩存,並報告。
可操做對象:(部分或所有值)
讀:client,server,req,storage
寫:client,req
返回值:
synth(status code,reason); 定義響應內容。
restart 重啓請求。
vcl_deliver
客戶端交付子程序,在vcl_backend_response子程序後調用(非pipe模式),或vcl_hit子程序後調用,可用於追加響應頭信息,cookie等內容。
可操做對象:(部分或所有值)
讀:client,server,req,resp,obj,storage
寫:client,req,resp
返回值:
deliver 正常交付後端或緩存響應內容,默認返回值。
restart 重啓請求。
vcl_backend_fetch
發送後端請求以前調用,可用於改變請求地址或其它信息,或放棄請求。
可操做對象:(部分或所有值)
讀:server,bereq,storage
寫:bereq
返回值:
fetch 正常發送請求到到後端取出響應內容,進入vcl_backend_response子程序,默認返回值。
abandon 放棄後端請求,並生成一個錯誤,進入vcl_backend_error子程序。
vcl_backend_response
後端響應後調用,可用於修改緩存時間及緩存相關信息。
可操做對象:(部分或所有值)
讀:server,bereq,beresp,storage
寫:bereq,beresp
返回值:
deliver 正常交付後端響應內容,進入vcl_deliver子程序,默認返回值。
abandon 放棄後端請求,並生成一個錯誤,進入vcl_backend_error子程序。
retry 重試後端請求,重試計數器加1,當超過配置中max_retries值時會報錯並進入vcl_backend_error子程序。
vcl_backend_error
後端處理失敗調用,異常頁面展現效果處理,可自定義錯誤響應內容,或修改beresp.status與beresp.http.Location重定向等。
可操做對象:(部分或所有值)
讀:server,bereq,beresp,storage
寫:bereq,beresp
返回值:
deliver 只交付 sysnthetic(string) 自定義內容,默認返回後端異常標準錯誤內容。
retry 重試後端請求,重試計數器加1,當超過配置中max_retries值時會報錯並進入vcl_backend_error子程序。
vcl_synth
自定義響應內容。能夠經過synthetic()和返回值 synth 調用,這裏能夠自定義異常顯示內容,也能夠修改resp.status與resp.http.Location重定向。
可操做對象:(部分或所有值)
讀:client,server,req,resp,storage
寫:req,resp
返回值:
deliver 只交付 sysnthetic(string) 自定義內容,默認返回 sysnth 異常指定狀態碼與錯誤內容。
restart 重啓請求。
vcl_init
加載vcl時最早調用,用於初始化VMODs,該子程序不參與請求處理,僅在vcl加載時調用一次。
可操做對象:(部分或所有值)
讀:server
寫:無
返回值:
ok 正常返回,進入vcl_recv子程序,默認返回值。
vcl_fini
卸載當前vcl配置時調用,用於清理VMODs,該子程序不參與請求處理,僅在vcl正常丟棄後調用。
可操做對象:(部分或所有值)
讀:server
寫:無
返回值:
ok 正常返回,本次vcl將釋放,默認返回值。
如下是我的畫的一個子程序調用流程圖,經過大部分子程序的return返回值進入下一步行動,用於參考,若有不當還請指出:(restart,retry未包含)