Varnish 導覽

編譯自(有時會添加自己的話,可能不會明顯標記出來):
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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 緩存的基礎知識 1、程序本身具有局部性 時間局部性過去訪問到的數據,也有可能被兩次訪問 空間局部性一個數據被訪問到...
    魏鎮坪閱讀 2,078評論 1 3
  • 本文編譯自:users-guide 本節講述如何使用 VCL 編寫處理 HTTP 流量的策略。 Varnish 的...
    C86guli閱讀 3,221評論 0 1
  • 1.介紹 運維日常: 2.Web Page Cache: varnish2.0,3.0處理過程 varnish4....
    尛尛大尹閱讀 3,410評論 0 0
  • 華盛頓最大的旅游資源就是大大小小、各式各樣的免費博物館。因為一般的博物館都是每天早上10:00開門,每天出行的時間...
    LilyRen閱讀 433評論 0 0
  • 最近在看一部小說,不明白為何女主和男二都準備在一起結婚了,但后來還是分開了,因為不合適。這個不合適,不是因為作者的...
    雍雍吶閱讀 216評論 0 0