varnish配置語法(應用)

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未包含)

wKioL1XCuCfhjc2vAANZ3bT5jDE715.jpg

相關文章
相關標籤/搜索