您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何使用Varnish為web網站加速,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
使用Varnish為網站加速
varnish概述
Varnish是一款高性能的開源HTTP加速器,挪威最大的在線報紙Verdens Gang (http://www.vg.no) 使用3臺Varnish代替了原來的12臺squid,性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的內核開發者之一,他認為現在的計算機比起1975年已經復雜許多。在1975年時,儲存媒介只有兩種:內存與硬盤。但現在計算機系統的內存除了主存外,還包括了cpu內的L1、L2,甚至有L3快取。硬盤上也有自己的快取裝置,因此squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但操作系統可以得知這些情況,所以這部份的工作應該交給操作系統處理,這就是Varnish cache設計架構。
監聽端口號:6081
varnish基礎概念詳解
1)Varnish的特點
1)可以基于內存緩存,也可以在磁盤上緩存,如果期望內存大小超過幾十個G,比如圖片服務器,純粹使用內存,性能未必好,這時候可以使用磁盤進行緩存,或使用SSD X 2 做RAID1避免磁盤損壞,在實現隨機訪問上ssd硬盤要比機械硬盤要好的多,如果必須要緩存在磁盤上還是建議使用ssd磁盤
2)可以利用虛擬內存方式,IO性能會非常好
3)支持設置0-60秒精確緩存時間
4)支持VCL,其配置是通過vcl編程語言來完成的。其配置需要先轉換成C代碼,所以使用vcl所寫的配置,要先轉換成C語言代碼,因此要依賴于GCC 臨時的編譯vcl配置的,編譯完之后才能運行起來
5)獨特的日志存儲及管理機制,日志既然保存在內存中,日志可以供多個應用程序所訪問,所以一般查看命中率,當前請求有多少get post 方法等等,都需使用專用的工具才可以查看,比如varnishshtopvarnishlog 等命令工具用來查看日志信息
6)支持使用varnish狀態引擎,通過巧妙的狀態引擎的設計完成不同的引擎對用戶的請求和緩存代理機制進行處理,用配置文件為狀態引擎提供狀態法則,完成緩存處理、完成代理處理等等
2)varnish緩存數據機制:
3)Varnish代理VCL處理流程圖
處理過程大致分為如下幾個步驟:
(1)Receive狀態,也就是請求處理的入口狀態,根據VCL規則判斷該請求應該是Pass或Pipe,或者進入Lookup(本地查詢)。
(2)Lookup狀態,在緩存中查找用戶請求的對象,如果緩存中沒有其請求的對象,后續操作很可能會將其請求的對象進行緩存;進入此狀態后,會在hash表中查找數據,若找到,則進入Hit(命中)狀態,否則進入miss狀態。
(3)Pass狀態,在此狀態下,會進入后端請求,即進入fetch取狀態。
(4)Fetch狀態,在Fetch取狀態下,對請求,進行后端的獲取,發送請求,獲得數據,并進行本地的存儲。
(5)Deliver提供狀態,將獲取到的數據發送給客戶端,然后完成本次請求。
注:
pass:繞過緩存,即不從緩存中查詢內容或不將內容存儲至緩存中;
pipe:不對客戶端進行檢查或做出任何操作,而是在客戶端與后端服務器之間建立專用“管道”,并直接將數據在二者之間進行傳送;此時,keep-alive連接中后續傳送的數據也都將通過此管道進行直接傳送,并不會出現在任何日志中;
4)總結: 用戶通過varnish加速時,有4線路可以獲得數據
一:實驗目標
實戰1:緩存一個網站
實戰2:使用varnish緩存多個網站
二:實驗環境
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
參數:
--nosignature想要略過數字簽名的檢查,不檢測合法性。因為這個rpm包不是redhat發布的。
-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#創建首頁
2)解決需要開啟apache 長鏈接功能
[root@xuegod64 ~]# vim /etc/httpd/conf/httpd.conf
改:76 KeepAliveOff
為:KeepAlive On
2)啟動阿帕奇服務器
[root@xuegod64 ~]#service httpd restart#在xuegod64上開啟web服務器
4、實戰1:緩存單個web網站
1)測試源站點:在瀏覽器中訪問:http://192.168.1.64/
2)測試加速:在瀏覽器中訪問:http://192.168.1.63/
能夠正常訪問,說明代理設置成功。
測試緩存命中:
擴展:curl命令
curl是通過url語法在命令行下上傳或下載文件的工具軟件,它支持http,https,ftp,ftps,telnet等多種協議,常被用來抓取網頁和監控Web服務器狀態。
參數:
-I只取http響應頭的信息,不取網頁內容
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目錄緩存
實戰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 {。。。} 之前,插入以下內容:
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上取數據,訪問bbs.xuegod.cn域名時到web2取數據,訪問其他頁面報錯。
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)測試:網頁訪問www.xuegod.cn和bbs.xuegod.cn則會顯示不同的內容。
在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/
上述內容就是如何使用Varnish為web網站加速,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。