溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Varnish為web網(wǎng)站加速

發(fā)布時間:2021-11-05 09:49:14 來源:億速云 閱讀:127 作者:柒染 欄目:建站服務(wù)器

本篇文章為大家展示了如何使用Varnish為web網(wǎng)站加速,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

使用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)復(fù)雜許多。在1975年時,儲存媒介只有兩種:內(nèi)存與硬盤。但現(xiàn)在計算機系統(tǒng)的內(nèi)存除了主存外,還包括了cpu內(nèi)的L1、L2,甚至有L3快取。硬盤上也有自己的快取裝置,因此squid cache自行處理物件替換的架構(gòu)不可能得知這些情況而做到最佳化,但操作系統(tǒng)可以得知這些情況,所以這部份的工作應(yīng)該交給操作系統(tǒng)處理,這就是Varnish cache設(shè)計架構(gòu)。

監(jiān)聽端口號:6081 

varnish基礎(chǔ)概念詳解

1)Varnish的特點

1)可以基于內(nèi)存緩存,也可以在磁盤上緩存,如果期望內(nèi)存大小超過幾十個G,比如圖片服務(wù)器,純粹使用內(nèi)存,性能未必好,這時候可以使用磁盤進行緩存,或使用SSD X 2 做RAID1避免磁盤損壞,在實現(xiàn)隨機訪問上ssd硬盤要比機械硬盤要好的多,如果必須要緩存在磁盤上還是建議使用ssd磁盤

2)可以利用虛擬內(nèi)存方式,IO性能會非常好

3)支持設(shè)置0-60秒精確緩存時間

4)支持VCL,其配置是通過vcl編程語言來完成的。其配置需要先轉(zhuǎn)換成C代碼,所以使用vcl所寫的配置,要先轉(zhuǎn)換成C語言代碼,因此要依賴于GCC 臨時的編譯vcl配置的,編譯完之后才能運行起來

5)獨特的日志存儲及管理機制,日志既然保存在內(nèi)存中,日志可以供多個應(yīng)用程序所訪問,所以一般查看命中率,當前請求有多少get post 方法等等,都需使用專用的工具才可以查看,比如varnishshtopvarnishlog 等命令工具用來查看日志信息

6)支持使用varnish狀態(tài)引擎,通過巧妙的狀態(tài)引擎的設(shè)計完成不同的引擎對用戶的請求和緩存代理機制進行處理,用配置文件為狀態(tài)引擎提供狀態(tài)法則,完成緩存處理、完成代理處理等等

 

2)varnish緩存數(shù)據(jù)機制:

如何使用Varnish為web網(wǎng)站加速 

3)Varnish代理VCL處理流程圖

如何使用Varnish為web網(wǎng)站加速 

處理過程大致分為如下幾個步驟:

(1)Receive狀態(tài),也就是請求處理的入口狀態(tài),根據(jù)VCL規(guī)則判斷該請求應(yīng)該是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:不對客戶端進行檢查或做出任何操作,而是在客戶端與后端服務(wù)器之間建立專用“管道”,并直接將數(shù)據(jù)在二者之間進行傳送;此時,keep-alive連接中后續(xù)傳送的數(shù)據(jù)也都將通過此管道進行直接傳送,并不會出現(xiàn)在任何日志中;

 

4)總結(jié): 用戶通過varnish加速時,有4線路可以獲得數(shù)據(jù)

如何使用Varnish為web網(wǎng)站加速 

一:實驗?zāi)繕?/strong>

實戰(zhàn)1:緩存一個網(wǎng)站

實戰(zhàn)2:使用varnish緩存多個網(wǎng)站

二:實驗環(huán)境

Varnish代理服務(wù)端  xuegod63   192.168.1.63

       Web服務(wù)端  xuegod64   192.168.1.64

       Web服務(wù)端  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服務(wù):

[root@xuegod63 ~]# /etc/init.d/varnish start

2、配置xuegod63成為varnish加速代理服務(wù)器

1)配置xuegod63成為varnish服務(wù)器

[root@xuegod63 ~]# vim /etc/varnish/default.vcl

###配置一個后端服務(wù)器

改:

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服務(wù)端口

[root@xuegod63 ~]# vim /etc/sysconfig/varnish

改:

66 VARNISH_LISTEN_PORT=6081

為:

VARNISH_LISTEN_PORT=80

3)啟動varnish服務(wù)器

[root@xuegod63 ~]# /etc/init.d/varnish start

Starting Varnish Cache:                                    [  OK  ]

3、配置xuegod64為后端web服務(wù)器

1)配置xuegod64為后端web服務(wù)器

[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)啟動阿帕奇服務(wù)器

[root@xuegod64 ~]#service httpd restart#在xuegod64上開啟web服務(wù)器

4、實戰(zhàn)1:緩存單個web網(wǎng)站

1)測試源站點:在瀏覽器中訪問:http://192.168.1.64/

如何使用Varnish為web網(wǎng)站加速 

2)測試加速:在瀏覽器中訪問:http://192.168.1.63/

如何使用Varnish為web網(wǎng)站加速 

能夠正常訪問,說明代理設(shè)置成功。

 

測試緩存命中:

擴展:curl命令

   curl是通過url語法在命令行下上傳或下載文件的工具軟件,它支持http,https,ftp,ftps,telnet等多種協(xié)議,常被用來抓取網(wǎng)頁和監(jiān)控Web服務(wù)器狀態(tài)。

參數(shù):

-I只取http響應(yīng)頭的信息,不取網(wǎng)頁內(nèi)容

 

3)查看啟動的web服務(wù)器類型

[root@xuegod63 ~]# curl -I 192.168.1.64#在xuegod63上查看xuegod64開啟動的web服務(wù)器類型

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服務(wù)器基本操作:

[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服務(wù)器

1)配置xuegod62為web2服務(wù)器

[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服務(wù)器:

[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/

如何使用Varnish為web網(wǎng)站加速 

上述內(nèi)容就是如何使用Varnish為web網(wǎng)站加速,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI