編譯自(有時會添加自己的話,可能不會明顯標記出來):
https://www.varnish-cache.org/docs/4.0/tutorial/index.html
本文檔包含基本的主題:Varnish 是什么,Varnish 是怎么工作的。
目錄:
- Varnish 緩存代理的基本原理
- 支持的平臺
- Varnish 開發進度
- Getting in touch
- 啟動 Varnish
- 讓 Varnish 監聽在 80 端口
- 后端服務器
- 特性
- Now what
Varnish 緩存代理的基本原理
Varnish 是一個 HTTP 緩存代理,它從 client 接受請求,并嘗試從緩存中響應請求。如果無法從緩存中提供響應,Varnish 向后端服務器發起請求,獲取響應,將響應存儲在緩存中,然后把響應發送給 client。
如果 Varnish 能夠從 Cache 中響應一個請求,所消耗的時間是微秒級別的,這個響應速度比直接從 HTTP 服務器響應請求的速度要快兩個數量級,所以緩存命中率越高,網站的訪問速度就越快。
根據從后端服務器獲取的 HTTP 響應,Varnish 會決定是否對其進行緩存。后端服務器可以使用 response header Cache-Control 主動告訴 Varnish 緩存這個響應。有幾種情況 Varnish 是不緩存響應的,最典型的情況,是 HTTP 響應中使用了 cookies,因為 cookie 是關于某個特定用戶的,所以緩存意義不大,Varnish 默認不緩存這樣的響應。
使用 Varnish 配置語言 - Varnish Configuration Language (VCL),可對 Varnish 的行為和功能進行配置,詳細的介紹參考 Varnish Users Guide。
性能
Varnish 擁有現代的架構,設計時著眼于性能。性能通常只與網絡的速度相關,有效的性能調優不是很重要。你可將注意力放在配置 web 的工作上,對于性能和可擴展性則不需要太關心。
靈活性
Varnish 除了其優秀的性能,另一個最大的特性是其配置語言的靈活性。使用 VCL 寫的規則,讓你可以對入站的請求進行控制。比如,選擇提供什么樣的內容服務,從哪里獲取內容,請求和響應將被如何修改。
支持的平臺
Varnish 支持 Linux 和 FreeBSD 以及 OS X 等其他操作系統。
Varnish 開發進度
Varnish 是一個社區驅動的項目..
Getting in touch
聯系方式..
啟動 Varnish
本小節適用于: Ubuntu, Debian, Red Hat Enterprise Linux or CentOS.
安裝好 Varnish 之后,啟動 Varnish:service varnish start
。
現在 Varnish 已經啟動了。我們來確認一下,使用瀏覽器訪問 http://127.0.0.1:6081/,注意將 IP 地址替換為你的運行 Varnish 的機器的 IP地址。根據默認的配置,Varnish 會嘗試將請求轉發到一個 web 應用,默認轉發給本機的 8080 端口:http://127.0.0.1:8080。
如果沒有 web 應用在 http://127.0.0.1:8080 運行,Varnish 會返回一個錯誤。Varnish 對于返回錯誤信息總是很謹慎的,不管是什么錯誤,Varnish 總是返回 "Error 503 Service Unavailable"。
可能你的 web 應用跑在其他地址上,讓我們修改配置文件,指向這些 web 應用。
使用你最喜歡的編輯器打開 /etc/varnish/default.vcl
文件。其中多數被注釋了,其中可能有如下內容:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
我們可以修改它,使其指向你的 web 服務器。我們這里使用 http://www.varnish-cache.org/:
vcl 4.0;
backend default {
.host = "varnish-cache.org";
.port = "80";
}
現在執行 service varnish reload
重新加載配置文件,如果成功了,使用瀏覽器訪問 http://127.0.0.1:6081/,(記得替換IP地址),你會看見一個目錄列表。為什么是看到目錄列表呢,因為你的 client 沒有發送適當的 Host header,所以顯示默認的 webfolder。
讓 Varnish 監聽在 80 端口
現在我們的 Varnish 監聽于 6081 端口,這個端口用于調試是不錯的。我們現在讓 Varnish 監聽在 HTTP 的默認端口: 80 端口。
首先關閉 Varnish:service varnish stop
現在我們需要編輯啟動 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,除了上面這種配置,另外還有一種參數配置的方法:
#VARNISH_LISTEN_ADDRESS=
VARNISH_LISTEN_PORT=80
不指定 VARNISH_LISTEN_ADDRESS,表示監聽本地所有地址。這些參數會被引用:
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
現在 Varnish 就會監聽在 80 端口了。
現在所有對你的站點的訪問,都會經過 Varnish 的處理。
后端服務器
在 Varnish 中有 backend servers 或者 origin servers 的概念,可稱之為后端 web 服務器。后端 web 服務器通過 Varnish 的緩存功能對訪問進行加速。
我們來編輯配置文件,如果是編譯安裝,路徑為 /usr/local/etc/varnish/default.vcl
,如果是軟件包安裝,路徑為 /etc/varnish/default.vcl
。
剛才我們已經編輯過:
vcl 4.0;
backend default {
.host = "www.varnish-cache.org";
.port = "80";
}
這表示 Varnish 為 http://www.varnish-cache.org:80 做緩存代理。
現在配置 Varnish 為自己的 web 應用的緩存代理。剛才我們已經配置 Varnish 監聽于 80 端口,現在配置后端服務器地址:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Varnish 可定義多個后端服務器,并且可以聯合多個后端服務器為一個后端集群,進行負載均衡。
下面我們看看 Varnish 的特別之處,以及如何利用這些特性。
特性
Varnish 跟其他程序相比有一些特別的特性,其中一個我們已經介紹過 - VCL。下面我們將快速過一下其他重要的特性:
Configuration
Varnish 的配置使用 VCL 編寫。Varnish 啟動時,其配置被轉換為 C 代碼,然后交給 C 編譯器編譯,然后被加載和執行。
所以,與其他程序的配置不同,Varnish 的配置不是打開或關閉某些選項,而是使用 VCL 編寫對入站訪問流量的處理策略。
varnishadm
Varnish 擁有一個 admin console,你可以通過 varnishadm 命令連接該 console。為了進行連接認證,執行 varnishadm 命令的用戶必須對 /etc/varnish/secret
文件有可讀權限。
一旦啟動了 console,你可對 Varnish 做一些操作。比如:啟動或關閉 cache 進程,加載 VCL,調整負載均衡策略,調整失效的緩存內容。
通過內置命令 help,可獲取操作的幫助。
varnishlog
Varnish 的日志不會存入磁盤,而是存入一塊內存空間中。Varnish 的日志被“流式化”。任何時候,你都可以連接到日志流,查看正在發生什么。Varnish 日志會記錄很多信息,可以通過 varnishlog 命令查看日志流。
Now what
本文檔的介紹到此結束,下面我們可以學習 Varnish Users Guide。