本篇文章為大家展示了如何使用Varnish為web網(wǎng)站加速,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都網(wǎng)站設計、網(wǎng)站制作、永新網(wǎng)絡推廣、小程序設計、永新網(wǎng)絡營銷、永新企業(yè)策劃、永新品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供永新建站搭建服務,24小時服務熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com使用Varnish為網(wǎng)站加速
varnish概述
Varnish是一款高性能的開源HTTP加速器,挪威大的在線報紙Verdens Gang (http://www.vg.no) 使用3臺Varnish代替了原來的12臺squid,性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的內(nèi)核開發(fā)者之一,他認為現(xiàn)在的計算機比起1975年已經(jīng)復雜許多。在1975年時,儲存媒介只有兩種:內(nèi)存與硬盤。但現(xiàn)在計算機系統(tǒng)的內(nèi)存除了主存外,還包括了cpu內(nèi)的L1、L2,甚至有L3快取。硬盤上也有自己的快取裝置,因此squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但操作系統(tǒng)可以得知這些情況,所以這部份的工作應該交給操作系統(tǒng)處理,這就是Varnish cache設計架構。
監(jiān)聽端口號:6081
varnish基礎概念詳解
1)Varnish的特點
1)可以基于內(nèi)存緩存,也可以在磁盤上緩存,如果期望內(nèi)存大小超過幾十個G,比如圖片服務器,純粹使用內(nèi)存,性能未必好,這時候可以使用磁盤進行緩存,或使用SSD X 2 做RAID1避免磁盤損壞,在實現(xiàn)隨機訪問上ssd硬盤要比機械硬盤要好的多,如果必須要緩存在磁盤上還是建議使用ssd磁盤
2)可以利用虛擬內(nèi)存方式,IO性能會非常好
3)支持設置0-60秒精確緩存時間
4)支持VCL,其配置是通過vcl編程語言來完成的。其配置需要先轉(zhuǎn)換成C代碼,所以使用vcl所寫的配置,要先轉(zhuǎn)換成C語言代碼,因此要依賴于GCC 臨時的編譯vcl配置的,編譯完之后才能運行起來
5)獨特的日志存儲及管理機制,日志既然保存在內(nèi)存中,日志可以供多個應用程序所訪問,所以一般查看命中率,當前請求有多少get post 方法等等,都需使用專用的工具才可以查看,比如varnishshtopvarnishlog 等命令工具用來查看日志信息
6)支持使用varnish狀態(tài)引擎,通過巧妙的狀態(tài)引擎的設計完成不同的引擎對用戶的請求和緩存代理機制進行處理,用配置文件為狀態(tài)引擎提供狀態(tài)法則,完成緩存處理、完成代理處理等等
2)varnish緩存數(shù)據(jù)機制:
3)Varnish代理VCL處理流程圖
處理過程大致分為如下幾個步驟:
(1)Receive狀態(tài),也就是請求處理的入口狀態(tài),根據(jù)VCL規(guī)則判斷該請求應該是Pass或Pipe,或者進入Lookup(本地查詢)。
(2)Lookup狀態(tài),在緩存中查找用戶請求的對象,如果緩存中沒有其請求的對象,后續(xù)操作很可能會將其請求的對象進行緩存;進入此狀態(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ā)送給客戶端,然后完成本次請求。
注:
pass:繞過緩存,即不從緩存中查詢內(nèi)容或不將內(nèi)容存儲至緩存中;
pipe:不對客戶端進行檢查或做出任何操作,而是在客戶端與后端服務器之間建立專用“管道”,并直接將數(shù)據(jù)在二者之間進行傳送;此時,keep-alive連接中后續(xù)傳送的數(shù)據(jù)也都將通過此管道進行直接傳送,并不會出現(xiàn)在任何日志中;
4)總結: 用戶通過varnish加速時,有4線路可以獲得數(shù)據(jù)
一:實驗目標
實戰(zhàn)1:緩存一個網(wǎng)站
實戰(zhàn)2:使用varnish緩存多個網(wǎng)站
二:實驗環(huán)境
Varnish代理服務端 xuegod63 192.168.1.63
Web服務端 xuegod64 192.168.1.64
Web服務端 xuegod62 192.168.1.62
三:實驗代碼
1、安裝varnish
1)安裝varnish軟件包
[root@xuegod63 ~]# rpm -ivh varnish-libs-3.0.6-1.el6.x86_64.rpm
[root@xuegod63 ~]# rpm -ivh varnish-3.0.6-1.el6.x86_64.rpm
參數(shù):
--nosignature想要略過數(shù)字簽名的檢查,不檢測合法性。因為這個rpm包不是redhat發(fā)布的。
-i install 安裝
2)vainish各配置文件位置
vcl置文件:
[root@xuegod63 ~]# ls /etc/varnish/default.vcl
varnish主配置文件
[root@xuegod63 ~]# vim /etc/sysconfig/varnish
3)啟varnish服務:
[root@xuegod63 ~]# /etc/init.d/varnish start
2、配置xuegod63成為varnish加速代理服務器
1)配置xuegod63成為varnish服務器
[root@xuegod63 ~]# vim /etc/varnish/default.vcl
###配置一個后端服務器
改:
7 backend default {
8 .host = "127.0.0.1";
9 .port = "80";
10 }
為:
backend web1 {
.host = "192.168.1.64";
.port = "80";
}
###查看緩存命中情況
在:
90 # sub vcl_deliver {
91 # return (deliver);
92 # }
追加:
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT fromxuegodcache";
}
else {
set resp.http.X-Cache = "MISS from xuegodcache";
}
return (deliver);
}
保存退出。
2)配置varnish服務端口
[root@xuegod63 ~]# vim /etc/sysconfig/varnish
改:
66 VARNISH_LISTEN_PORT=6081
為:
VARNISH_LISTEN_PORT=80
3)啟動varnish服務器
[root@xuegod63 ~]# /etc/init.d/varnish start
Starting Varnish Cache: [ OK ]
3、配置xuegod64為后端web服務器
1)配置xuegod64為后端web服務器
[root@xuegod64 ~]# yum install httpd -y
[root@xuegod64 ~]# echo 192.168.1.64 > /var/www/html/index.html#創(chuàng)建首頁
2)解決需要開啟apache 長鏈接功能
[root@xuegod64 ~]# vim /etc/httpd/conf/httpd.conf
改:76 KeepAliveOff
為:KeepAlive On
2)啟動阿帕奇服務器
[root@xuegod64 ~]#service httpd restart#在xuegod64上開啟web服務器
4、實戰(zhàn)1:緩存單個web網(wǎng)站
1)測試源站點:在瀏覽器中訪問:http://192.168.1.64/
2)測試加速:在瀏覽器中訪問:http://192.168.1.63/
能夠正常訪問,說明代理設置成功。
測試緩存命中:
擴展:curl命令
curl是通過url語法在命令行下上傳或下載文件的工具軟件,它支持http,https,ftp,ftps,telnet等多種協(xié)議,常被用來抓取網(wǎng)頁和監(jiān)控Web服務器狀態(tài)。
參數(shù):
-I只取http響應頭的信息,不取網(wǎng)頁內(nèi)容
3)查看啟動的web服務器類型
[root@xuegod63 ~]# curl -I 192.168.1.64#在xuegod63上查看xuegod64開啟動的web服務器類型
HTTP/1.1 403 Forbidden
Date: Sat, 08 Aug 2015 11:17:49 GMT
Server:Apache/2.2.15 (Red Hat)
Accept-Ranges: bytes
Content-Length: 3985
Connection: close
Content-Type: text/html; charset=UTF-8
4)測試緩存命中
[root@xuegod63 ~]# curl -I 192.168.1.63
HTTP/1.1 503 Service Unavailable
Server: Varnish
Content-Type: text/html; charset=utf-8
Retry-After: 5
Content-Length: 419
Accept-Ranges: bytes
Date: Sat, 08 Aug 2015 11:12:20 GMT
X-Varnish: 1141298100
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache:MISS from linuxidc cache#未命中
5)再次測試:
[root@xuegod63 ~]# curl -I 192.168.1.63
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Sat, 08 Aug 2015 11:21:11 GMT
ETag: "25f61-d-51ccaf318dbb9"
Content-Type: text/html; charset=UTF-8
Content-Length: 13
Accept-Ranges: bytes
Date: Sat, 08 Aug 2015 11:28:37 GMT
X-Varnish: 1141298121 1141298120
Age: 1
Via: 1.1 varnish
Connection: keep-alive
X-Cache:HIT from linuxidc cache#命中
6)varnish服務器基本操作:
[root@xuegod63 ~]# varnishadm ban.url .*$ #清除所有緩存
[root@xuegod63 ~]# curl -I 192.168.1.63
。。。
X-Cache: MISS from linuxidc cache
[root@xuegod63 ~]# varnishadm ban.url /index.html #清除index.html頁面緩存
7)測試:
[root@xuegod63 ~]# curl -I 192.168.1.63/index.html
[root@xuegod63 ~]# varnishadm ban.url /admin/$ #清除admin目錄緩存
實戰(zhàn)2:使用varnish加速多個不同域名站點的web服務器
1)配置xuegod62為web2服務器
[root@xuegod62 ~]# yum install httpd -y
[root@xuegod62 ~]# echo 192.168.1.62 > /var/www/html/index.html
[root@xuegod62 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.62 xuegod62.cn
[root@xuegod62 ~]# service httpd restart
2)配置xuegod63 上的varnish服務器:
[root@xuegod63 ~]# vim /etc/varnish/default.vcl
改:
backend web1 {
.host = "192.168.1.64";
.port = "80";
}
為:
backend web1 {
.host = "192.168.1.64";
.port = "80";
}
backend web2 {
.host = "192.168.1.62";
.port = "80";
}
[root@xuegod63 ~]# vim /etc/varnish/default.vcl#在之前的sub vcl_deliver {。。。} 之前,插入以下內(nèi)容:
sub vcl_recv {
if (req.http.host ~ "^(www.)?xuegod.cn") {
set req.http.host = "www.xuegod.cn";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.xuegod.cn") {
set req.backend = web2;
}else {error 404 "xuegodcache";
}
}
sub vcl_deliver {
#當訪問www.xuegod.cn域名時從web1上取數(shù)據(jù),訪問bbs.xuegod.cn域名時到web2取數(shù)據(jù),訪問其他頁面報錯。
3)重新加載varnish配置文件:
[root@xuegod63 ~]# service varnish reload
Loading vcl from /etc/varnish/default.vcl
Current running config name is boot
Using new config name reload_2015-08-08T19:42:11
VCL compiled.
available 2 boot
active 0 reload_2015-08-08T19:42:11
Done
4)測試:網(wǎng)頁訪問www.xuegod.cn和bbs.xuegod.cn則會顯示不同的內(nèi)容。
在xuegod62上測試:
[root@xuegod62 ~]# vim/etc/hosts#添加hosts文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.62 xuegod62.cn
192.168.1.63 www.xuegod.cn
192.168.1.63 bbs.xuegod.cn
[root@xuegod62 ~]# yum install elinks -y
[root@xuegod62 ~]# elinks www.xuegod.cn--dump
192.168.1.64
[root@xuegod62 ~]# elinks bbs.xuegod.cn--dump
192.168.1.62
5)測試報錯信息:http://192.168.1.63/
上述內(nèi)容就是如何使用Varnish為web網(wǎng)站加速,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。