摘要:線程對(duì)于緩存的對(duì)象,根據(jù)過期時(shí)間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存輸出內(nèi)容的副本當(dāng)下一個(gè)請(qǐng)求到來的時(shí)候,如果是相同的,緩存會(huì)根據(jù)緩存機(jī)制決定是直接使用副本響應(yīng)訪問請(qǐng)求還是向源服務(wù)器再次發(fā)送請(qǐng)求。
博文參考
http://www.178linux.com/76700 http://www.mamicode.com/info-detail-229142.htmlVarnish簡(jiǎn)介
varnish 是非常輕量級(jí),也很強(qiáng)大的一款提供緩存服務(wù)的應(yīng)用.高性能且開源的反向代理服務(wù)器和HTTP加速器;
varnish的配置是通過VCL緩存策略工具實(shí)現(xiàn)的,這個(gè)工具是一種簡(jiǎn)單的編程語言,用戶可以自定義變量、
有好幾個(gè)內(nèi)置的函數(shù)和變量,但是它的函數(shù)不支持接受參數(shù),而且沒有返回值。使用VCL編寫的緩存策略通常保存至.vcl文件中,
其需要編譯成二進(jìn)制的格式后才能由varnish調(diào)用。事實(shí)上,整個(gè)緩存策略就是由幾個(gè)特定的子例程如vcl_recv、
vcl_fetch等組成,它們分別在不同的位置(或時(shí)間)執(zhí)行,如果沒有事先為某個(gè)位置自定義子例程,varnish將會(huì)執(zhí)行默認(rèn)的定義。
VCL策略在啟用前,會(huì)由management進(jìn)程將其轉(zhuǎn)換為C代碼,而后再由gcc編譯器將C代碼編譯成二進(jìn)制程序,
所以varnish的安裝和運(yùn)行依賴于gcc庫。編譯完成后,management負(fù)責(zé)將其連接至varnish實(shí)例,
即子進(jìn)程。編譯時(shí)會(huì)檢查語法是否有誤,避免了裝載錯(cuò)誤語法的VCL。一但編譯完成并且沒有語法錯(cuò)誤就會(huì)被裝載,
同時(shí)可以保存好幾份配置,當(dāng)你覺得之前的配置策略更科學(xué)時(shí),調(diào)用之前的配置即可. 只要調(diào)用庫中的配置策略,就可以使規(guī)則生效,
無需重啟或者reload.所以修改配置策略的代價(jià)很小。配置的策略只有在varnish重啟時(shí)才會(huì)清除,當(dāng)然,也可以手動(dòng)清理,
可以使用varnishadm的vcl.discard命令完成。
varnish支持多種不同類型的后端存儲(chǔ),這可以在varnishd啟動(dòng)時(shí)使用-s選項(xiàng)指定。后端存儲(chǔ)的類型包括:
(1)file:使用特定的文件存儲(chǔ)全部的緩存數(shù)據(jù),并通過操作系統(tǒng)的mmap()系統(tǒng)調(diào)用將整個(gè)緩存文件映射至內(nèi)存區(qū)域(如果內(nèi)存夠大,條件允許); 可以指定其所保存的位置,大小,以及緩存分配粒度, 即每次分配的大小,直到size大小為止不再分配.使用方法 file[,path[,size[,granularity]]]
(2)malloc:使用malloc()庫調(diào)用在varnish啟動(dòng)時(shí)向操作系統(tǒng)申請(qǐng)指定大小的內(nèi)存空間以存儲(chǔ)緩存對(duì)象; 使用方法malloc[,size]
(3)persistent(experimental):與file的功能相同,但可以持久存儲(chǔ)數(shù)據(jù)(即重啟varnish數(shù)據(jù)時(shí)不會(huì)被清除);仍處于測(cè)試期,悲催,好不容易有一個(gè)能持久保存的,還不穩(wěn)定;
varnish的進(jìn)程分兩類,
管理進(jìn)程, (master進(jìn)程),其工作職責(zé)如下1,讀入配置文件
2,調(diào)用合適的存儲(chǔ)類型 ,varnish支持將緩存寫入磁盤
3,創(chuàng)建/讀入相應(yīng)大小的緩存文件 (但是這個(gè)功能還處于測(cè)試階段,建議暫時(shí)不要使用)
4,初始化管理,將緩存文件結(jié)構(gòu)空間關(guān)聯(lián)到存儲(chǔ)結(jié)構(gòu)體 ,以待分配,
5,fork出多個(gè)空閑子進(jìn)程并監(jiān)控各child進(jìn)程
工作進(jìn)程 (child子進(jìn)程)1,將前面打開的存儲(chǔ)文件整個(gè)mmap到內(nèi)存
2,創(chuàng)建并實(shí)始化空閑的結(jié)構(gòu)體,用來存儲(chǔ)緩存對(duì)象,
3,由諸多線程各司其職負(fù)責(zé)完成相關(guān)的工作:
主進(jìn)程 fork 子進(jìn)程,主進(jìn)程等待子進(jìn)程的信號(hào),子進(jìn)程退出后,主進(jìn)程重新啟動(dòng)子進(jìn)程,子進(jìn)程生成若干線程。
Accept 線程:接受請(qǐng)求,將請(qǐng)求分配到空閑子進(jìn)程上,并讓空閑的work線程響應(yīng)用戶請(qǐng)求
Work線程: work線程有多個(gè),從隊(duì)列領(lǐng)取請(qǐng)求,并對(duì)請(qǐng)求處理,處理完成后,繼續(xù)領(lǐng)取下一個(gè)請(qǐng)求進(jìn)行處理
work線程處理時(shí),會(huì)讀取該請(qǐng)求的url, 以此判定本地緩存中是否有該緩存對(duì)象命中,如果命中直接構(gòu)建響應(yīng)報(bào)文,
如果沒有,則去上游服務(wù)器查找數(shù)據(jù),并緩存至本地再構(gòu)建響應(yīng)報(bào)文響應(yīng)請(qǐng)求.
Epoll 線程: 一個(gè)請(qǐng)求處理稱作一個(gè) session,在 session 周期內(nèi),處理完請(qǐng)求后,會(huì)交給 Epoll 處理,監(jiān)聽是否還有事件發(fā)生。
Expire 線程:對(duì)于緩存的對(duì)象,根據(jù)過期時(shí)間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。
線程之間的關(guān)系:
worker:處理用戶請(qǐng)求 accept: 接收用戶請(qǐng)求
當(dāng)緩存空間耗盡:
需要清理緩存空間了,可以使用LRU算法清理,(LRU指最近最少使用的)緩存處理流程
什么是web cache?
Web緩存是指一個(gè)Web資源(如html頁面,圖片,js,數(shù)據(jù)等)存在與Web服務(wù)器和客戶端(瀏覽器)直接的副本。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存輸出內(nèi)容的副本;當(dāng)下一個(gè)請(qǐng)求到來的時(shí)候,如果是相同的URL,緩存會(huì)根據(jù)緩存機(jī)制決定是直接使用副本響應(yīng)訪問請(qǐng)求還是向源服務(wù)器再次發(fā)送請(qǐng)求。 —–摘自Alloy Team
緩存命中率類型:
文檔命中率:按文檔數(shù)量進(jìn)行衡量
字節(jié)命中率:按命中的字節(jié)數(shù)量進(jìn)行衡量
緩存處理流程:接受請(qǐng)求:接受來自client的訪問請(qǐng)求
解析請(qǐng)求:提取client訪問請(qǐng)求的URL中的頭部信息
查詢緩存:根據(jù)提取的頭部信息查詢緩存數(shù)據(jù)是否含有客戶端訪問的請(qǐng)求數(shù)據(jù)
新鮮度監(jiān)測(cè):如果緩存數(shù)據(jù)中含有客戶端訪問的數(shù)據(jù),則檢查數(shù)據(jù)的有效性
創(chuàng)建響應(yīng)報(bào)文:當(dāng)確定緩存命中的數(shù)據(jù)有效,則創(chuàng)建響應(yīng)報(bào)文
發(fā)送響應(yīng)報(bào)文:當(dāng)響應(yīng)報(bào)文構(gòu)建完成之后,發(fā)送響應(yīng)報(bào)文給客戶端
記錄日志:發(fā)送響應(yīng)報(bào)文的同時(shí)記錄日志信息
新鮮度監(jiān)測(cè)的方法:1、過期日期或有效性:
HTTP/1.0:使用Expries定義緩存過期的絕對(duì)時(shí)間
例如:Expires:Sat, 18 Jul 2015 03:41:04 GMT
HTTP/1.1: 利用Cache-Control定義文檔的最大使用期限,是相對(duì)時(shí)長(zhǎng)
例如:Cache-Control: max-age 1d: 緩存有效期為1天
2、服務(wù)器再驗(yàn)證:向服務(wù)器驗(yàn)證數(shù)據(jù)是否發(fā)送改變
1)如果原始內(nèi)容沒有改變,則服務(wù)器僅響應(yīng)首部,不附帶body部分,響應(yīng)碼為304;
2)如果原始內(nèi)容發(fā)生改變,則正常響應(yīng),響應(yīng)碼為200;
3)若果原始內(nèi)容已不存在,則響應(yīng)碼為404,此時(shí)緩存也應(yīng)該清除緩存項(xiàng);
3、條件式請(qǐng)求首部:
If-Modified-Since: 從指定時(shí)間之后的時(shí)間內(nèi),原始內(nèi)容是否發(fā)生啦的改變
If-None-Match: 每個(gè)版本的文檔都有一個(gè)標(biāo)簽ETag,當(dāng)內(nèi)容發(fā)生改變此ETag也會(huì)發(fā)送更改
控制緩存能力:
服務(wù)器端:Cache-Control
no-store: 不準(zhǔn)緩存;
no-cache: 可以緩存,但在提供給請(qǐng)求者之前必須做新鮮度監(jiān)測(cè);
must-revalidate:可以緩存,但在提供給請(qǐng)求者之前必須做新鮮度監(jiān)測(cè);
max-age: 最大使用期限
Expires:過期的絕對(duì)時(shí)間
客戶端新鮮度限制:Cache-Control
max-stale: 最大失效時(shí)間
max-stale=:指定最大失效時(shí)間
min-fresh=:最短有效時(shí)間
max-age=:最大有效時(shí)間
注意:含有private、authentication、cookie等信息最好不要緩存;
varnishi有兩類線程:management:
1)讀入配置文件
2)調(diào)用合適類型的存儲(chǔ)(有malloc內(nèi)存、tmp、persisten三種存儲(chǔ)類型)
3)創(chuàng)建/讀入相應(yīng)大小的緩存文件
4)初始化管理結(jié)構(gòu)體空間
5)fork并監(jiān)控child進(jìn)程
child/cache:
1)將打開的存儲(chǔ)文件映射進(jìn)內(nèi)存空間
2)創(chuàng)建并初始化空閑的結(jié)構(gòu)體空間
varnish有九個(gè)狀態(tài)引擎,如下圖所示:
varnish九個(gè)狀態(tài)引擎varnish配置文件介紹:
1)后端節(jié)點(diǎn)定義:
backend name { } ;
代理緩存:子進(jìn)程定義
sub+狀態(tài)引擎 { };
引擎之間都有相關(guān)性,前一個(gè)引擎通過return(x)定義退出狀態(tài),進(jìn)而決定繼續(xù)處理下一個(gè)引擎;
2)vcl:
vcl是基于“域”的簡(jiǎn)單編程語言;支持算術(shù)運(yùn)算和邏輯運(yùn)算,支持正則表達(dá)式,支持使用set、unset自定義變量或取消變量,支持if條件判斷,有內(nèi)置的函數(shù)和變量;
配置語法:
①注釋://單行注釋,/…../多行注釋
②sub $name 定義函數(shù)
③不支持循環(huán)
④支持終止語句return,沒有返回值
⑤域?qū)S?/p>
⑥操作符:=(賦值)、==(比較)、~(正則)、!(取反)、&&(和)、||(或者)
3)vcl的內(nèi)置函數(shù)
regsub(str,regexp,sub):以regexp為模式匹配str,將匹配到的第一個(gè)替換為sub regsuball(str,regexp,sub):以regexp為模式匹配str,將所有匹配到的都替換為sub hash_date(str):做hash計(jì)算 purge:從緩存中挑出某對(duì)象并刪除 return(x): 定義退出狀態(tài) 4)內(nèi)置變量: ![clipboard.png](/img/bVTJhn) ![clipboard.png](/img/bVTJhI) # 配置文件: ·/etc/varnish/varnish.params—配置varnish服務(wù)進(jìn)程的工作特性,例如監(jiān)聽的地址和端口,緩存機(jī)制; ·/etc/varnish/default.vcl—配置各Child/Cache線程的緩存工作屬性;配置函數(shù)
1、vcl_recv函數(shù)
用于接收和處理請(qǐng)求,當(dāng)請(qǐng)求到達(dá)并成功接收后被調(diào)用,通過判斷請(qǐng)求的數(shù)據(jù)來決定如何處理請(qǐng)求。
此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束:
pass:表示進(jìn)入pass模式,把請(qǐng)求控制權(quán)交給vcl_pass函數(shù)。
pipe:表示進(jìn)入pipe模式,把請(qǐng)求控制權(quán)交給vcl_pipe函數(shù)。
lookup: 表示進(jìn)入hash,把請(qǐng)求控制權(quán)交給vcl_hash函數(shù).
error code [reason]:表示返回“code”給客戶端,并放棄處理該請(qǐng)求,“code”是錯(cuò)誤標(biāo)識(shí),例如200、405等,“reason”是錯(cuò)誤提示信息。
2、vcl_pipe函數(shù)
此函數(shù)在進(jìn)入pipe模式時(shí)被調(diào)用,用于將請(qǐng)求直接傳遞至后端主機(jī),在請(qǐng)求和返回的內(nèi)容沒有改變的情況下,將不變的內(nèi)容返回給客戶端,直到這個(gè)鏈接關(guān)閉
此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束:
error code [reason]
pipe
3、vcl_pass函數(shù)
此函數(shù)在進(jìn)入pass模式時(shí)被調(diào)用,用于將請(qǐng)求直接傳遞至后端主機(jī),后端主機(jī)應(yīng)答數(shù)據(jù)后送給客戶端,但不進(jìn)行任何緩存,在當(dāng)前連接下每次都返回最新的內(nèi)容, 關(guān)鍵字結(jié)束:
error code [reason]
pass
4、lookup
表示在緩存里查找被請(qǐng)求的對(duì)象,并且根據(jù)查找的結(jié)果把控制權(quán)交給函數(shù)vcl_hit或者函數(shù)vcl_miss
5、vcl_hit函數(shù)
在執(zhí)行l(wèi)ookup指令后,如果在緩存中找到請(qǐng)求的內(nèi)容,將自動(dòng)調(diào)用該函數(shù)
此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束:
deliver:表示將找到的內(nèi)容發(fā)送給客戶端,并把控制權(quán)交給函數(shù)vcl_deliver
error code [reason]
pass
6、vcl_miss函數(shù)
在執(zhí)行l(wèi)ookup指令后,如果沒有在緩存中找到請(qǐng)求的內(nèi)容時(shí)自動(dòng)調(diào)用該方法,此函數(shù)可以用于判斷是否需要從后端服務(wù)器取內(nèi)容
此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束:
fetch:表示從后端獲取請(qǐng)求的內(nèi)容,并把控制權(quán)交給vcl_fetch函數(shù)
error code [reason]
pass :去后端主機(jī)取數(shù)據(jù)時(shí),額外再做一些操作
7、vcl_fetch函數(shù)
在從后端主機(jī)更新緩存并且獲取內(nèi)容后調(diào)用該方法,接著,通過判斷獲取的內(nèi)容來決定是否將內(nèi)容放入緩存,還是直接返回給客戶端
此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束:
error code [reason]
pass 可以不緩存
deliver 也可以緩存
8、vcl_deliver函數(shù)
在緩存中找到請(qǐng)求的內(nèi)容后,發(fā)送給客戶端前調(diào)用此方法。此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束:
error code [reason]
deliver 響應(yīng)客戶端請(qǐng)求
9、vcl_timeout 函數(shù)
此函數(shù)在緩存內(nèi)容到期前調(diào)用。一般以如下幾個(gè)關(guān)鍵字結(jié)束:
discard:從緩存中清除該內(nèi)容。
fetch 也可以去后端主機(jī)取數(shù)據(jù)
10、vcl_discard函數(shù)
在緩存內(nèi)容到期后或緩存空間不夠時(shí),自動(dòng)調(diào)用該方法,一般以如下幾個(gè)關(guān)鍵字結(jié)束:
keep:表示將內(nèi)容繼續(xù)保留在緩存中
discard:從緩存中清除該內(nèi)容。
·/etc/varnish/varnish.params—配置varnish服務(wù)進(jìn)程的工作特性,例如監(jiān)聽的地址和端口,緩存機(jī)制; ·/etc/varnish/default.vcl—配置各Child/Cache線程的緩存工作屬性;1)安裝
[root@varnish ~]# yum -y install varnish
2)配置varnish服務(wù)配置文件[root@varnish ~]# vim /etc/sysconfig/varnish # Configuration file for varnish NFILES=131072 定義可以打開的最大文件數(shù)量 MEMLOCK=82000 定義log信息使用多大的內(nèi)存空間,注意varnish log信息保存在內(nèi)存中 NPROCS="unlimited" 每個(gè)線程響應(yīng)多少請(qǐng)求 # DAEMON_COREFILE_LIMIT="unlimited" 保持默認(rèn)即可 RELOAD_VCL=1 保持默認(rèn)即可 # This file contains 4 alternatives, please use only one. 有四種配置方法: ## Alternative 1, Minimal configuration, no VCL 方法一 # # Listen on port 6081, administration on localhost:6082, and forward to # content server on localhost:8080. Use a fixed-size cache file. # #DAEMON_OPTS="-a :6081 # -T localhost:6082 # -b localhost:8080 # -u varnish -g varnish # -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 2, Configuration with VCL 方法二 # # Listen on port 6081, administration on localhost:6082, and forward to # one content server selected by the vcl file, based on the request. Use a # fixed-size cache file. # #DAEMON_OPTS="-a :6081 # -T localhost:6082 # -f /etc/varnish/default.vcl # -u varnish -g varnish # -S /etc/varnish/secret # -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 3, Advanced configuration 方法三 # # See varnishd(1) for more information. # # # Main configuration file. You probably want to change it ? VARNISH_VCL_CONF=/etc/varnish/test.vcl 定義主配置文件 # # # Default address and port to bind to # # Blank address means all IPv4 and IPv6 interfaces, otherwise specify # # a host name, an IPv4 dotted quad, or an IPv6 address in brackets. # VARNISH_LISTEN_ADDRESS= VARNISH_LISTEN_PORT=80 定義監(jiān)聽端口,默認(rèn)為6081 # # # Telnet admin interface listen address and port VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 管理varnish監(jiān)聽地址 VARNISH_ADMIN_LISTEN_PORT=6082 管理varnish的監(jiān)聽端口 # # # Shared secret file for admin interface VARNISH_SECRET_FILE=/etc/varnish/secret varnish加密文件 # # # The minimum number of worker threads to start VARNISH_MIN_THREADS=50 varnish最小進(jìn)程數(shù) # # # The Maximum number of worker threads to start VARNISH_MAX_THREADS=1000 varnish最大進(jìn)程數(shù) # # # Idle timeout for worker threads VARNISH_THREAD_TIMEOUT=120 varnish工作進(jìn)程超時(shí)時(shí)長(zhǎng) # # # Cache file location VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin 緩存文件存儲(chǔ)類型,可以定義使用內(nèi)存存儲(chǔ) # # # Cache file size: in bytes, optionally using k / M / G / T suffix, # # or in percentage of available disk space using the % suffix. VARNISH_STORAGE_SIZE=1G 定義存儲(chǔ)空間大小 # # # Backend storage specification VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" 定義存儲(chǔ)屬性 # # # Default TTL used when the backend does not specify one VARNISH_TTL=120 緩存時(shí)長(zhǎng) # # # DAEMON_OPTS is used by the init script. If you add or remove options, make # # sure you update this section, too. DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} -f ${VARNISH_VCL_CONF} -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} -t ${VARNISH_TTL} -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} -u varnish -g varnish -S ${VARNISH_SECRET_FILE} -s ${VARNISH_STORAGE}" # ## Alternative 4, Do It Yourself. See varnishd(1) for more information. 方法四 # # DAEMON_OPTS="3)配置varnish主配置文件,添加響應(yīng)報(bào)文首部
[root@varnish sysconfig]# cd /etc/varnish/ [root@varnish varnish]# cp default.vcl test.vcl [root@varnish varnish]# vim test.vcl backend default { 定義后端主 .host = "172.16.2.14"; 后端主機(jī)地址 .port = "80"; 后端主機(jī)監(jiān)聽端口 } sub vcl_deliver { 在vcl_deliver狀態(tài)引擎中定義 if (obj.hits > 0) { 如果緩存命中次數(shù)大于0 set resp.http.X-Cache = "HIT"; 添加響應(yīng)首部X-Cache;設(shè)置值為HIT; } else { set resp.http.X-Cache = "MISS"; 添加響應(yīng)首部X-Cache;設(shè)置值為MISS; } return (deliver); 定義返回狀態(tài) }
應(yīng)用此配置:
[root@varnish ~]# /etc/init.d/varnish start root@varnish ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 進(jìn)入varnish管理界面 200 ----------------------------- Varnish Cache CLI 1.0 ----------------------------- Linux,2.6.32-431.el6.x86_64,x86_64,-sfile,-smalloc,-hcritbit varnish-3.0.7 revision f544cd8 Type "help" for command list. Type "quit" to close CLI session. varnish> vcl.load t1 /etc/varnish/test.vcl 載入配置文件 200 VCL compiled. varnish> vcl.use t1 使用配置文件 200VCL狀態(tài)引擎: 內(nèi)建變量:
·req.*:request,表示由客戶端發(fā)來的請(qǐng)求報(bào)文相關(guān);
·bereq.*:由varnish發(fā)往BE主機(jī)的httpd請(qǐng)求相關(guān);
·beresp.*:由BE主機(jī)響應(yīng)給varnish的響應(yīng)報(bào)文相關(guān);
·resp.*:由varnish響應(yīng)給client相關(guān);
·obj.*:存儲(chǔ)在緩存空間中的緩存對(duì)象的屬性;只讀;
交互式配置·bereq., req.:
bereq.http.HEADERS bereq.request:請(qǐng)求方法; bereq.url:請(qǐng)求的url; bereq.proto:請(qǐng)求的協(xié)議版本; bereq.backend:指明要調(diào)用的后端主機(jī); req.http.Cookie:客戶端的請(qǐng)求報(bào)文中Cookie首部的值; req.http.User-Agent ~ “chrome”·beresp., resp.:
beresp.http.HEADERS beresp.status:響應(yīng)的狀態(tài)碼; reresp.proto:協(xié)議版本; beresp.backend.name:BE主機(jī)的主機(jī)名; beresp.ttl:BE主機(jī)響應(yīng)的內(nèi)容的余下的可緩存時(shí)長(zhǎng);·obj.*
obj.hits:此對(duì)象從緩存中命中的次數(shù); obj.ttl:對(duì)象的ttl值·server.*
server.ip server.hostname·client.*
varnishadm
登錄:
-S /etc/varnish/secret -T 127.0.0.1:80
配置文件相關(guān):
vcl.list :狀態(tài)引擎列表; vcl.load:裝載,加載并編譯; vcl.use:激活; vcl.discard:刪除; vcl.show [-v]:查看指定的配置文件的詳細(xì)信息,可看默認(rèn)配置;
運(yùn)行時(shí)參數(shù):
param.show -l:顯示列表; param.show param.set
緩存存儲(chǔ):
storage.list
后端服務(wù)器:
backend.list對(duì)某種請(qǐng)求不檢查緩存
示例: vcl_recv { if (req.url ~ “(?i)^/(login|admin)”) { return(pass); } }拒絕某種請(qǐng)求訪問
示例: vcl_recv { if (req.http.User-Agent ~ “(?i)curl”) { return(synth(405)); } }對(duì)公開資源,取消私有標(biāo)記,并設(shè)定緩存時(shí)長(zhǎng)
示例: if (beresp.http.cache-control !~ “s-maxage”) { if (bereq.url ~ “(?i).(jpg|jpeg|png|gif|css|js)$”) { unset beresp.http.Set-Cookie; set beresp.ttl = 3600s; } }顯示后端主機(jī)IP
示例: if (req.restarts == 0) { if (req.http.X-Fowarded-For) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + “,” + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } }根據(jù)purge請(qǐng)求清除緩存
示例: sub vcl_recv { if (req.method == “PURGE”) { return(purge); } }設(shè)置acl訪問控制
示例: acl purgers { “127.0.0.0”/8; “10.1.0.0”/16; } sub vcl_recv { if (req.method == “PURGE”) { if (!client.ip ~ purgers) { return(synth(405,”Purging not allowed for ” + client.ip)); } return(purge); } }用ban命令清除緩存
示例: ban req.url ~ ^/javascripts ban req.url ~ /js$配置varnish后端多臺(tái)主機(jī)
示例: import directors; # 導(dǎo)入模塊 backend server1 { .host = “172.16.42.2”; .port = “80”; } backend server2 { .host = “172.16.42.3”; .port = “80”; } sub vcl_init { new websrvs = directors.round_robin(); websrvs.add_backend(server1); websrvs.add_backend(server2); } sub vcl_recv { # 用哪一組server來請(qǐng)求 set req.backend_hint = websrvs.backend(); }varnish動(dòng)靜分離
示例: backend default { .host = “172.16.42.10”; .port = “80”; } backend appsrv { .host = “172.16.42.2”; .port = “80”; } sub vcl_recv { if (req.url ~ “(?i).php$”) { set req.backend_hint = appsrv; } else { set req.backend_hint = default; } }對(duì)后端主機(jī)進(jìn)行健康狀態(tài)檢測(cè)
.probe:定義健康狀態(tài)檢測(cè)方法; .url:檢測(cè)時(shí)請(qǐng)求的URL,默認(rèn)為”/”; .request:發(fā)出的具體請(qǐng)求; .window:基于最近的多少次檢查來判斷其健康狀態(tài); .threshhold:最近.window中定義的這么次檢查中至有.threshhold定義的次數(shù)是成功的; .interval:檢測(cè)頻度; .timeout:超時(shí)時(shí)長(zhǎng); .expected_response:期望的響應(yīng)碼,默認(rèn)為200; 示例: backend server1 { .host = “172.16.42.3”; .port = “80”; .probe = { .url= “/.healthcheck.html” #得先創(chuàng)建這個(gè)測(cè)試頁面; .timeout= 1s; .interval= 2s; .window=5; .threshold=5; } }varnish的性能優(yōu)化
·thread_pools: 最好小于或等于CPU核心數(shù)量; ·thread_pool_max:每線程池的最大線程數(shù); ·thread_pool_min:額外意義為“最大空閑線程數(shù)”; ·thread_pool_timeout:線程超時(shí)時(shí)間 ·thread_pool_add_delay:新創(chuàng)建線程 ·thread_pool_destroy_delay:殺死空閑線程延遲時(shí)間 設(shè)置方式: /etc/varnish/varnish.params (永久有效) param.set 示例: DAEMON_OPTS=”-p thread_pools=6 -p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300″varnish日志查看
1、varnishstat – Varnish Cache statistics
-1 -1 -f FILED_NAME -l:可用于-f選項(xiàng)指定的字段名稱列表; MAIN.cache_hit MAIN.cache_miss 示例: varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss varnishstat -l -f MAIN -f MEMPOOL
2、varnishtop – Varnish log entry ranking
-1 Instead of a continously updated display, print the statistics once and exit. -i taglist,可以同時(shí)使用多個(gè)-i選項(xiàng),也可以一個(gè)選項(xiàng)跟上多個(gè)標(biāo)簽; -I <[taglist:]regex> -x taglist:排除列表 -X <[taglist:]regex>
3、varnishlog – Display Varnish logs
4、varnishncsa – Display Varnish logs in Apache / NCSA combined log format
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/35852.html
摘要:線程對(duì)于緩存的對(duì)象,根據(jù)過期時(shí)間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存輸出內(nèi)容的副本當(dāng)下一個(gè)請(qǐng)求到來的時(shí)候,如果是相同的,緩存會(huì)根據(jù)緩存機(jī)制決定是直接使用副本響應(yīng)訪問請(qǐng)求還是向源服務(wù)器再次發(fā)送請(qǐng)求。 博文參考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...
摘要:線程對(duì)于緩存的對(duì)象,根據(jù)過期時(shí)間,組織成二叉堆,該線程周期檢查該堆的根,處理過期的文件。緩存會(huì)根據(jù)進(jìn)來的請(qǐng)求保存輸出內(nèi)容的副本當(dāng)下一個(gè)請(qǐng)求到來的時(shí)候,如果是相同的,緩存會(huì)根據(jù)緩存機(jī)制決定是直接使用副本響應(yīng)訪問請(qǐng)求還是向源服務(wù)器再次發(fā)送請(qǐng)求。 博文參考 http://www.178linux.com/76700 http://www.mamicode.com/info-detail-22...
摘要:如帶有如下頭信息,,默認(rèn)不會(huì)緩存。是一款高性能開源的反向代理服務(wù)器和緩存服務(wù)器,其開發(fā)者是核心的開發(fā)人員之一。備份復(fù)制備份用默認(rèn)端口開啟你會(huì)得到如下信息我們看到,已經(jīng)開啟,但是除了知道這個(gè)東西已經(jīng)監(jiān)聽端口外,我們不知道發(fā)生了什么。 varnish 小草新blog: http://homeway.me/ 一、介紹下吧: 首先了解幾個(gè)概念, 1. Varnish不緩存帶有...
閱讀 3091·2023-04-25 15:44
閱讀 1875·2019-08-30 13:11
閱讀 2830·2019-08-30 11:11
閱讀 3003·2019-08-29 17:21
閱讀 1306·2019-08-29 15:38
閱讀 897·2019-08-29 12:49
閱讀 1792·2019-08-28 18:19
閱讀 3221·2019-08-26 14:01