varnish配置語法(應用)

varnish配置主要分爲:後端配置,ACL配置,probes配置,directors配置,核心子程序配置幾大塊。其中後端配置是必要的,在多臺服務器中還會用到directors配置,核心子程序配置。


後端配置:即給varnish添加反代服務器節點,最少配置一個。

ACL配置:即給varnish添加訪問控制列表,可以指定這些列表訪問或禁止訪問。

probes配置:即給varnish添加探測後端服務器是否正常的規則,方便切換或禁止對應後端服務器。

directors配置:即給varnish添加負載均衡模式管理多個後端服務器。

核心子程序配置:即給varnish添加後端服務器切換,請求緩存,訪問控制,錯誤處理等規則。


varnish基本語法 http://php2012web.blog.51cto.com/5585213/1680580


varnish中內置子程序有:

注:varnish內置子程序均有自己限定的返回動作  return (動作);  不同的動作將調用對應下一個子程序。

vcl_recv

開始處理請求,通過 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未包含)

wKioL1XCuCfhjc2vAANZ3bT5jDE715.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章