編譯自(有時會添加自己的話艳汽,可能不會明顯標(biāo)記出來):
https://www.varnish-cache.org/docs/4.0/tutorial/index.html
本文檔包含基本的主題:Varnish 是什么,Varnish 是怎么工作的递鹉。
目錄:
- Varnish 緩存代理的基本原理
- 支持的平臺
- Varnish 開發(fā)進(jìn)度
- Getting in touch
- 啟動 Varnish
- 讓 Varnish 監(jiān)聽在 80 端口
- 后端服務(wù)器
- 特性
- Now what
Varnish 緩存代理的基本原理
Varnish 是一個 HTTP 緩存代理弓候,它從 client 接受請求郎哭,并嘗試從緩存中響應(yīng)請求。如果無法從緩存中提供響應(yīng)弓叛,Varnish 向后端服務(wù)器發(fā)起請求彰居,獲取響應(yīng),將響應(yīng)存儲在緩存中撰筷,然后把響應(yīng)發(fā)送給 client陈惰。
如果 Varnish 能夠從 Cache 中響應(yīng)一個請求,所消耗的時間是微秒級別的毕籽,這個響應(yīng)速度比直接從 HTTP 服務(wù)器響應(yīng)請求的速度要快兩個數(shù)量級抬闯,所以緩存命中率越高,網(wǎng)站的訪問速度就越快关筒。
根據(jù)從后端服務(wù)器獲取的 HTTP 響應(yīng)溶握,Varnish 會決定是否對其進(jìn)行緩存。后端服務(wù)器可以使用 response header Cache-Control 主動告訴 Varnish 緩存這個響應(yīng)蒸播。有幾種情況 Varnish 是不緩存響應(yīng)的睡榆,最典型的情況萍肆,是 HTTP 響應(yīng)中使用了 cookies,因為 cookie 是關(guān)于某個特定用戶的胀屿,所以緩存意義不大塘揣,Varnish 默認(rèn)不緩存這樣的響應(yīng)。
使用 Varnish 配置語言 - Varnish Configuration Language (VCL)宿崭,可對 Varnish 的行為和功能進(jìn)行配置亲铡,詳細(xì)的介紹參考 Varnish Users Guide。
性能
Varnish 擁有現(xiàn)代的架構(gòu)葡兑,設(shè)計時著眼于性能奖蔓。性能通常只與網(wǎng)絡(luò)的速度相關(guān),有效的性能調(diào)優(yōu)不是很重要讹堤。你可將注意力放在配置 web 的工作上吆鹤,對于性能和可擴(kuò)展性則不需要太關(guān)心。
靈活性
Varnish 除了其優(yōu)秀的性能洲守,另一個最大的特性是其配置語言的靈活性檀头。使用 VCL 寫的規(guī)則,讓你可以對入站的請求進(jìn)行控制岖沛。比如,選擇提供什么樣的內(nèi)容服務(wù)搭独,從哪里獲取內(nèi)容婴削,請求和響應(yīng)將被如何修改。
支持的平臺
Varnish 支持 Linux 和 FreeBSD 以及 OS X 等其他操作系統(tǒng)牙肝。
Varnish 開發(fā)進(jìn)度
Varnish 是一個社區(qū)驅(qū)動的項目..
Getting in touch
聯(lián)系方式..
啟動 Varnish
本小節(jié)適用于: Ubuntu, Debian, Red Hat Enterprise Linux or CentOS.
安裝好 Varnish 之后唉俗,啟動 Varnish:service varnish start
。
現(xiàn)在 Varnish 已經(jīng)啟動了配椭。我們來確認(rèn)一下虫溜,使用瀏覽器訪問 http://127.0.0.1:6081/,注意將 IP 地址替換為你的運行 Varnish 的機(jī)器的 IP地址股缸。根據(jù)默認(rèn)的配置衡楞,Varnish 會嘗試將請求轉(zhuǎn)發(fā)到一個 web 應(yīng)用,默認(rèn)轉(zhuǎn)發(fā)給本機(jī)的 8080 端口:http://127.0.0.1:8080敦姻。
如果沒有 web 應(yīng)用在 http://127.0.0.1:8080 運行瘾境,Varnish 會返回一個錯誤。Varnish 對于返回錯誤信息總是很謹(jǐn)慎的镰惦,不管是什么錯誤迷守,Varnish 總是返回 "Error 503 Service Unavailable"。
可能你的 web 應(yīng)用跑在其他地址上旺入,讓我們修改配置文件兑凿,指向這些 web 應(yīng)用凯力。
使用你最喜歡的編輯器打開 /etc/varnish/default.vcl
文件。其中多數(shù)被注釋了礼华,其中可能有如下內(nèi)容:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
我們可以修改它咐鹤,使其指向你的 web 服務(wù)器。我們這里使用 http://www.varnish-cache.org/:
vcl 4.0;
backend default {
.host = "varnish-cache.org";
.port = "80";
}
現(xiàn)在執(zhí)行 service varnish reload
重新加載配置文件卓嫂,如果成功了慷暂,使用瀏覽器訪問 http://127.0.0.1:6081/,(記得替換IP地址),你會看見一個目錄列表晨雳。為什么是看到目錄列表呢行瑞,因為你的 client 沒有發(fā)送適當(dāng)?shù)?Host header,所以顯示默認(rèn)的 webfolder餐禁。
讓 Varnish 監(jiān)聽在 80 端口
現(xiàn)在我們的 Varnish 監(jiān)聽于 6081 端口血久,這個端口用于調(diào)試是不錯的。我們現(xiàn)在讓 Varnish 監(jiān)聽在 HTTP 的默認(rèn)端口: 80 端口帮非。
首先關(guān)閉 Varnish:service varnish stop
現(xiàn)在我們需要編輯啟動 Varnish 的配置文件:
Debian/Ubuntu
On Debian/Ubuntu this is /etc/default/varnish. In the file you'll find some text that looks like this:
DAEMON_OPTS="-a :6081
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,256m"
Change it to:
DAEMON_OPTS="-a :80
-T localhost:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,256m"
Red Hat Enterprise Linux / CentOS
在 RHEL/CentOS 上氧吐,配置文件是 /etc/sysconfig/varnish,除了上面這種配置末盔,另外還有一種參數(shù)配置的方法:
#VARNISH_LISTEN_ADDRESS=
VARNISH_LISTEN_PORT=80
不指定 VARNISH_LISTEN_ADDRESS筑舅,表示監(jiān)聽本地所有地址。這些參數(shù)會被引用:
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} \
-p thread_pool_min=${VARNISH_MIN_THREADS} \
-p thread_pool_max=${VARNISH_MAX_THREADS} \
-p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"
重啟 Varnish: service varnish start
現(xiàn)在 Varnish 就會監(jiān)聽在 80 端口了陨舱。
現(xiàn)在所有對你的站點的訪問翠拣,都會經(jīng)過 Varnish 的處理。
后端服務(wù)器
在 Varnish 中有 backend servers 或者 origin servers 的概念游盲,可稱之為后端 web 服務(wù)器误墓。后端 web 服務(wù)器通過 Varnish 的緩存功能對訪問進(jìn)行加速。
我們來編輯配置文件益缎,如果是編譯安裝谜慌,路徑為 /usr/local/etc/varnish/default.vcl
,如果是軟件包安裝莺奔,路徑為 /etc/varnish/default.vcl
欣范。
剛才我們已經(jīng)編輯過:
vcl 4.0;
backend default {
.host = "www.varnish-cache.org";
.port = "80";
}
這表示 Varnish 為 http://www.varnish-cache.org:80 做緩存代理。
現(xiàn)在配置 Varnish 為自己的 web 應(yīng)用的緩存代理弊仪。剛才我們已經(jīng)配置 Varnish 監(jiān)聽于 80 端口熙卡,現(xiàn)在配置后端服務(wù)器地址:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Varnish 可定義多個后端服務(wù)器,并且可以聯(lián)合多個后端服務(wù)器為一個后端集群励饵,進(jìn)行負(fù)載均衡驳癌。
下面我們看看 Varnish 的特別之處,以及如何利用這些特性役听。
特性
Varnish 跟其他程序相比有一些特別的特性颓鲜,其中一個我們已經(jīng)介紹過 - VCL表窘。下面我們將快速過一下其他重要的特性:
Configuration
Varnish 的配置使用 VCL 編寫。Varnish 啟動時甜滨,其配置被轉(zhuǎn)換為 C 代碼乐严,然后交給 C 編譯器編譯,然后被加載和執(zhí)行衣摩。
所以昂验,與其他程序的配置不同,Varnish 的配置不是打開或關(guān)閉某些選項艾扮,而是使用 VCL 編寫對入站訪問流量的處理策略既琴。
varnishadm
Varnish 擁有一個 admin console,你可以通過 varnishadm 命令連接該 console泡嘴。為了進(jìn)行連接認(rèn)證甫恩,執(zhí)行 varnishadm 命令的用戶必須對 /etc/varnish/secret
文件有可讀權(quán)限。
一旦啟動了 console酌予,你可對 Varnish 做一些操作磺箕。比如:啟動或關(guān)閉 cache 進(jìn)程,加載 VCL抛虫,調(diào)整負(fù)載均衡策略松靡,調(diào)整失效的緩存內(nèi)容。
通過內(nèi)置命令 help建椰,可獲取操作的幫助击困。
varnishlog
Varnish 的日志不會存入磁盤,而是存入一塊內(nèi)存空間中广凸。Varnish 的日志被“流式化”。任何時候蛛枚,你都可以連接到日志流谅海,查看正在發(fā)生什么。Varnish 日志會記錄很多信息蹦浦,可以通過 varnishlog 命令查看日志流扭吁。
Now what
本文檔的介紹到此結(jié)束,下面我們可以學(xué)習(xí) Varnish Users Guide盲镶。