




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、高性能HTTP加速器Varnish(安裝配置篇)一、安裝VarnishVarnish的安裝非常簡單,下面逐步介紹:1、安裝前的準備Varnish安裝環(huán)境如下表1所示:表1主機名 操作系統(tǒng) IP地址Varnish-serverCentOS release 5.4 46Web-server CentOS release 5.46接著,建立varnish用戶以及用戶組,并且創(chuàng)建Varnish緩存目錄和日志目錄:rootvarnish-server #useradd -s /sbin/nologin varnishrootvarnish-server #
2、mkdir /data/varnish/cacherootvarnish-server #mkdir /data/varnish/logrootvarnish-server #chown -R varnish:varnish /data/varnish/cacherootvarnish-server #chown -R varnish:varnish /data/varnish/log2、獲取varnish軟件Varnish的官方站點為,這里面有varnish的最新說明文檔,以及版本升級記錄,從此站點可以找到varnish在SourceForge的
3、下載鏈接,目前,varnish的最新版本是Varnish 2.1.2,下載完成后的包名為varnish-2.1.2.tar.gz,此處我們就以此版本為例,進行安裝配置。3、安裝pcre如果沒有安裝Pcre,在編譯varnish2.0以上版本時,會提示找不到pcre庫,而pcre庫是為了兼容正則表達式,所以必須先安裝pcre庫。rootvarnish-server #tar zxvf pcre-7.9.tar.gzrootvarnish-server #cd pcre-7.9/rootvarnish-server #./configure -prefix=/usr/local/pcre/root
4、varnish-server #make & make install4、安裝varnish這里我們將varnish安裝到/usr/local/目錄下,操作如下:rootvarnish-server #tar -zxvf varnish-2.1.2.tar.gzrootvarnish-server #cd varnish-2.1.2rootvarnish-server #export PKG_CONFIG_PATH=/usr/local/pcre/lib/pkgconfigrootvarnish-server #./configure -prefix=/usr/local/varnish -e
5、nable-dependency-trackin-enable-debugging-symbols-enable-developer-warningsrootvarnish-server #makerootvarnish-server #make installrootvarnish-server #cp redhat/varnish.initrc /etc/init.d/varnishrootvarnish-server #cp redhat/varnish.sysconfig /etc/sysconfig/varnish其中,“PKG_CONFIG_PATH”是指定varnish查找pcr
6、e庫的路徑,如果pcre安裝在了其它路徑下,在這里指定相應的路徑即可,Varnish默認查找的pcre庫路徑為/usr/local/lib/ pkgconfig。最后兩步操作是拷貝一些varnish守護進程的初始化腳本文件,這些腳本用于varnish的啟動、關閉管理等方面,在下面章節(jié)中會進行詳細講解。至此,varnish安裝完畢。二、配置Varnish1、VCL使用說明VCL,即為Varnish Configuation Language,用來定義varnish的存取策略,VCL語法比較簡單,跟C和perl比較相似,可以使用指定運算符“=”,比較運算符“=”,邏輯運算符“!,&,!”等形式。還
7、支持正則表達樣和用“”進行ACL匹配運算,同時還可以使用“set”這樣的關鍵字來指定變量。需要注意的是,“”字符在VCL里沒有特別的含義,這點與其它語言略有不同,另外,VCL只是配置,并不是真正的編程語言,沒有循環(huán),也沒有自定義變量。在講述Varnish配置之前,首先需要了解下varnish的配置語法,即VCL,下面對VCL常用的一些內(nèi)置函數(shù)和公用變量進行詳細介紹。VCL內(nèi)置函數(shù)(1)vcl_recv函數(shù)用于接收和處理請求,當請求到達并成功接收后被調(diào)用,通過判斷請求的數(shù)據(jù)來決定如何處理請求。此函數(shù)一般以如下幾個關鍵字結束:qpass:表示進入pass模式,把請求控制權交給vcl_pass函數(shù)。
8、qpipe:表示進入pipe模式,把請求控制權交給vcl_pipe函數(shù)。qerror code reason:表示返回“code”給客戶端,并放棄處理該請求,“code”是錯誤標識,例如200、405等,“reason”是錯誤提示信息。(2)vcl_pipe函數(shù)此函數(shù)在進入pipe模式時被調(diào)用,用于將請求直接傳遞至后端主機,在請求和返回的內(nèi)容沒有改變的情況下,將不變的內(nèi)容返回給客戶端,直到這個鏈接關閉。此函數(shù)一般以如下幾個關鍵字結束:qerror code reasonqpipe(3)vcl_pass函數(shù)此函數(shù)在進入pass模式時被調(diào)用,用于將請求直接傳遞至后端主機,后端主機應答數(shù)據(jù)后送給客戶
9、端,但不進行任何緩存,在當前連接下每次都返回最新的內(nèi)容。此函數(shù)一般以如下幾個關鍵字結束:qerror code reasonqpass(4)lookup表示在緩存里查找被請求的對象,并且根據(jù)查找的結果把控制權交給函數(shù)vcl_hit或者函數(shù)vcl_miss。(5)vcl_hit函數(shù)在執(zhí)行l(wèi)ookup指令后,如果在緩存中找到請求的內(nèi)容,將自動調(diào)用該函數(shù)。此函數(shù)一般以如下幾個關鍵字結束:qdeliver:表示將找到的內(nèi)容發(fā)送給客戶端,并把控制權交給函數(shù)vcl_deliver。qerror code reasonqpass(6)vcl_miss函數(shù)在執(zhí)行l(wèi)ookup指令后,如果沒有在緩存中找到請求的內(nèi)
10、容時自動調(diào)用該方法,此函數(shù)可以用于判斷是否需要從后端服務器取內(nèi)容。此函數(shù)一般以如下幾個關鍵字結束:qfetch:表示從后端獲取請求的內(nèi)容,并把控制權交給vcl_fetch函數(shù)。qerror code reasonqpass(7)vcl_fetch函數(shù)在從后端主機更新緩存并且獲取內(nèi)容后調(diào)用該方法,接著,通過判斷獲取的內(nèi)容來決定是否將內(nèi)容放入緩存,還是直接返回給客戶端。此函數(shù)一般以如下幾個關鍵字結束:qerror code reasonqpassqdeliver(8)vcl_deliver函數(shù)在緩存中找到請求的內(nèi)容后,發(fā)送給客戶端前調(diào)用此方法。此函數(shù)一般以如下幾個關鍵字結束:qerror code
11、 reasonqdeliver(9)vcl_timeout 函數(shù)此函數(shù)在緩存內(nèi)容到期前調(diào)用。一般以如下幾個關鍵字結束:qdiscard:表示從緩存中清除該內(nèi)容。qfetch(10)vcl_discard函數(shù)在緩存內(nèi)容到期后或緩存空間不夠時,自動調(diào)用該方法,一般以如下幾個關鍵字結束:qkeep:表示將內(nèi)容繼續(xù)保留在緩存中。qdiscard2、VCL處理流程圖通過上面對VCL函數(shù)的介紹,讀者對各個函數(shù)實現(xiàn)的功能已經(jīng)有了一個了解,其實每個函數(shù)之間都是相互關聯(lián)的,下圖列出了varnish處理HTTP請求的一個運行流程圖。處理過程大致分為如下幾個步驟:(1)Receive狀態(tài),也就是請求處理的入口狀態(tài),
12、根據(jù)VCL規(guī)則判斷該請求應該是Pass或Pipe,或者進入Lookup(本地查詢)。(2)Lookup狀態(tài),進入此狀態(tài)后,會在hash表中查找數(shù)據(jù),若找到,則進入Hit狀態(tài),否則進入miss狀態(tài)。(3)Pass狀態(tài),在此狀態(tài)下,會進入后端請求,即進入fetch狀態(tài)。(4)Fetch狀態(tài),在Fetch狀態(tài)下,對請求進行后端的獲取,發(fā)送請求,獲得數(shù)據(jù),并進行本地的存儲。(5)Deliver狀態(tài), 將獲取到的數(shù)據(jù)發(fā)送給客戶端,然后完成本次請求。3、內(nèi)置公用變量VCL內(nèi)置的公用變量可以用在不同的VCL函數(shù)中,根據(jù)這些公用變量使用的不同階段,下面依次介紹。當請求到達后,可以使用的公用變量如表2所示:表2
13、公用變量名稱 含義req.backend 指定對應的后端主機server.ip 表示服務器端IPclient.ip 表示客戶端IPreq.request 指定請求的類型,例如GET、HEAD、POST等req.url 指定請求的地址to 表示客戶端發(fā)起請求的HTTP協(xié)議版本req.http.header表示對應請求中的http頭部信息req. restarts 表示請求重啟的次數(shù),默認最大值為4Varnish 在向后端主機請求時,可以使用的公用變量如表3所示:表3公用變量名稱含義beresp.request指定請求的類型,例如GET、HEAD等beresp.url指定請求的地址b
14、eresp .proto表示客戶端發(fā)起請求的HTTP協(xié)議版本beresp .http.header表示對應請求中的http頭部信息beresp .ttl表示緩存的生存周期,也就是cache保留多長時間,單位是秒從cache或者后端主機獲取內(nèi)容后,可以使用的公用變量如表4所示:表4公用變量名稱含義obj.status表示返回內(nèi)容的請求狀態(tài)代碼,例如200、302、504等obj.cacheable表示返回的內(nèi)容是否可以緩存,也就是說,如果HTTP返回是200、203、300、301、302、404、410等,并且有非0的生存期,則可以緩存obj.valid表示是否是有效的HTTP應答obj.re
15、sponse表示返回內(nèi)容的請求狀態(tài)信息to表示返回內(nèi)容的HTTP協(xié)議版本obj.ttl表示返回內(nèi)容的生存周期,也就是緩存時間,單位是秒obj.lastuse表示返回上一次請求到現(xiàn)在的間隔時間,單位是秒對客戶端應答時,可以使用的公用變量如表5所示:表5公用變量名稱含義resp.status表示返回給客戶端的HTTP狀態(tài)代碼to表示返回給客戶端的HTTP協(xié)議版本resp.http.header表示返回給客戶端的HTTP頭部信息resp.response表示返回給客戶端的HTTP狀態(tài)信息在上面的講述中,我們只是介紹了常用的VCL內(nèi)置公用變量,如果需要了解和使用更多的公用
16、變量信息,請登錄varnish官方網(wǎng)站查閱。三 、配置一個簡單的Varnish實例由于版本的不同,Varnish配置文件的寫法也存在一定差異,varnish2.x版本和1.x版本之間不但配置文件寫法不同,而且新的版本功能也增加很多,并且去除了很多應用BUG,這里講述的版本是varnish2.1.2,配置文件寫法也以varnish2.x版本為基準。Varnish安裝完成后,默認的配置文件為/usr/local/varnish/etc/varnish/default.vcl,此文件內(nèi)容默認全部被注釋掉了,這里,我們以這個文件為模板,創(chuàng)建一個新的文件vcl.conf,并且放到/usr/local/v
17、arnish/etc目錄下,配置完成的vcl.conf文件如下:#通過backend定義了一個名稱為webserver的后端主機,“.host”指定后端主機的IP地址或者域名,“.port”指定后端主機的服務端口。其中,“6”就是后端的一個web服務器。backend webserver .host = 6; .port = 80;#調(diào)用vcl_recv開始。sub vcl_recv if (req.http.x-forwarded-for) set req.http.X-Forwarded-For = req.http.X-Forwarded-
18、For , client.ip; else set req.http.X-Forwarded-For = client.ip; #如果請求的類型不是GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE時,進入pipe模式。注意這里是“&”的關系。 if (req.request != GET & req.request != HEAD & req.request != PUT & req.request != POST & req.request != TRACE & req.request != OPTIONS & req.request != DELETE) ret
19、urn (pipe); #如果請求的類型不是GET與HEAD,則進入pass模式。 if (req.request != GET & req.request != HEAD) return (pass); #對或者兩個域名進行緩存加速,這是個泛域名的概念,也就是所有以或者結尾的域名都進行緩存。 if (req.http.host (.*). | req.http.host (.*).) set req.backend = webserver; #對以.jsp和.do結尾以及帶有?的URL時,直
20、接從后端服務器讀取內(nèi)容。 if (req.url .(jsp|do)($|?) return (pass); else return (lookup); sub vcl_pipe return (pipe);sub vcl_pass return (pass);sub vcl_hash set req.hash += req.url; if (req.http.host) set req.hash += req.http.host; else set req.hash += server.ip; return (hash);sub vcl_hit if (!obj.cacheable) return (pass); return (deliver);sub vcl_miss return (fetch);sub vcl_fetch if (!beresp.cacheable) return (pass); if (beresp.http.Set-Cookie) return (pass); #當url中包
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 3《不懂就要問》教學設計2024-2025學年統(tǒng)編版語文三年級上冊
- 道路拓寬建設合同范本
- 5建立良好的公共秩序-公共生活需要秩序(教學設計)統(tǒng)編版道德與法治四年級下冊
- 2025屆高考生物備考教學設計:第七章 生物的變異和進化之構建圖像模型分析細胞分裂與可遺傳變異的關系
- 購買蛋糕卷合同范本
- 采購教具合同范本
- 木門長期合同范本
- Unit 1 My Classroom Part A. Lets learn;Lets chant. (教學設計)-2024-2025學年人教PEP版英語四年級上冊
- 教育產(chǎn)品合同范本
- 藥店委托配送合同范本
- C語言大學實用教程課后參考答案蘇小紅
- 新部編版四年級下冊小學語文全冊課件PPT
- 高中人教物理選擇性必修一第3章第5節(jié)多普勒效應課件
- 全套橋梁施工技術交底記錄
- 2021年山東省威海市中考語文真題(解析版)
- 主動脈夾層的護理-ppt課件
- 高新技術企業(yè)認定申請書樣例與說明
- 數(shù)據(jù)結構英文教學課件:chapter6 Tree
- 高壓氧科工作總結高壓氧科個人年終總結.doc
- 《政治學概論》教學大綱
- 食品生物化學習題謝達平(動態(tài))
評論
0/150
提交評論