国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

緩存服務(wù)器Varnish

William_Sang / 1654人閱讀

摘要:線程對(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.html
Varnish簡(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  使用配置文件
200
 VCL狀態(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

相關(guān)文章

  • 緩存務(wù)器Varnish

    摘要:線程對(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...

    Baaaan 評(píng)論0 收藏0
  • 緩存務(wù)器Varnish

    摘要:線程對(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...

    MSchumi 評(píng)論0 收藏0
  • 運(yùn)維-務(wù)器緩存varnish

    摘要:如帶有如下頭信息,,默認(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不緩存帶有...

    leanote 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<