Varnish 反向代理伺服器 網頁存取加速 開放源始碼

安裝實作Varnish 建構反向代理伺服器

2018-08-28
一個高效能的網站伺服器,是每個網站管理者所迫切希望的,因此本文將簡介開源社群中頗富盛名的反向代理伺服器(Reverse Proxy)軟體Varnish(https://varnish-cache.org/),可利用其提供的快取(Cache)功能來加快網頁存取效率,進而提升網站伺服器的服務效能。

yum install pcre-devel
yum install python-docutils
./autogen.sh
./configure --prefix=/usr/local/
varnish  #將檔案安裝至/usr/local/
varnish目錄下
make && make install  
#編譯並安裝相關程式

安裝完成後,Varnish提供一個主要用來服務的伺服器程式varnishd,以下說明varnishd常用的選項:

-a:表示Varnish伺服器所使用的IP位址及通訊埠資訊,其格式為ip:port。

-b:表示後端實際服務的網站伺服器和通訊埠資訊。

-d:設定使用偵錯(Debug)模式,在此模式下會顯示詳盡的執行資訊。

-T:設定Varnish伺服器的管理IP位址及通訊埠,提供使用者可利用Telnet服務來管理Varnish伺服器的狀態。

-s:指定Varnish伺服器快取檔案的存放方式,可設定為以檔案的形式存放或是設定快取檔案的存放目錄路徑。

-n:指定Varnish伺服器所使用的工作目錄。

-f: 指定Varnish伺服器所使用的組態檔。

-w:min代表最小值,max代表最大值。指定Varnish伺服器在執行時,所使用的執行緒(Thread)區間,例如min設定為3,max設定為10,就表示是使用3至10個執行緒來執行Varnish伺服器。

在簡單說明了varnishd的選項後,接下來繼續介紹Varnish所定義的處理狀態。

認識Varnish處理狀態

Varnish伺服器將整個HTTP存取的過程分為各種不同的狀態,並且提供了使用者以VCL語法在各個狀態設定處理規則。其流程狀態圖如圖1所示,而相關的狀態說明如下:


▲圖1 Varnish流程狀態圖。

Receive

這是處理的第一個狀態,此狀態表示剛收到來自使用者的請求。使用者可在此狀態下,設定VCL規則來決定要進入Lookup、Pass或是Pipe的狀態。

Lookup

在此狀態中,Varnish會在快取空間中搜尋是否有使用者所需要的資料,如果有符合的資料,便進入Hit狀態並且進入最後的Deliver狀態,然後將資訊回覆給使用者。否則就會進入Miss狀態,再進入Fetch狀態,直接向後端的網站伺服器取得資訊。

Pass

在此狀態下,就會進入Fetch狀態,直接向後端的網站伺服器取得資訊。亦即不利用快取內的資訊,而是直接放行使用者的要求,讓後端的網站伺服器來服務此項要求。

Pipe

在此狀態下,即會進入Pipe狀態,用於將要求直接傳遞至後端服務的網站伺服器,並在要求和回覆的內容沒有改變的情況下,將沒有改變的內容回覆給使用者。

Fetch

這個狀態即是轉發使用者的要求(Request),並向後端網站伺服器取得實際的資訊。

Deliver

此狀態為最終的一個狀態,表示已取得使用者所要求的資訊,並回覆給使用者來完成本次的要求。

VCL設定語言說明

VCL的語法與傳統的C語言相當的類似,提供了變數、函數及相關的運算子。其中更針對每個處理階段設定相對應的函數,讓使用者能在函數內以類似程式語言的寫法來設定相關的規則。

相關函數說明

除了使用者可自行定義函數外,另針對上述的處理狀態,Varnish也內建了相關的函數,如下所述:

vcl_recv

當Varnish取得使用者的要求後,此函數即最先被觸發(即位於Receive狀態的處理函數),使用者可利用在此函數內設定判斷規則,來決定要求的下一個走向。

vcl_pipe

當Varnish進入到pipe狀態時,即會觸發此函數,用於將使用者的要求直接傳遞至後端服務的網站伺服器,並在該要求和回覆的內容沒有改變的情況下,將沒有改變的內容回覆給使用者。

vcl_pass

當Varnish進入到pass狀態時,即會觸發此函數。用於將要求直接傳遞至後端服務的網站伺服器,和pipe狀態不同的地方在於,此狀態下並不進行任何快取的動作,亦即每個使用者的要求均是直接向後端的網站伺服器要求資訊,因此每次所取得的資訊均會是最新的資訊,並且不會快取其要求的內容。

lookup

當Varnish進入到lookup狀態時,就會觸發此函數。用於在快取空間中尋找使用者的要求,並根據尋找的結果來決定進入vcl_hit(找到使用者所要求的內容),否則便進入vcl_miss(並未找到使用者所要求的內容)。

vcl_hit

當Varnish進入到hit狀態時,即會觸發此函數。使用者可在此函數內加上相關規則或者直接進入deliver狀態,將資訊回覆給使用者。

vcl_miss

當Varnish進入到miss狀態時,就會觸發此函數。若在lookup狀態下未找到資訊時,就會自動進入miss狀態。使用者可在此函數內加上判斷規則,來決定是否要進入fetch狀態,從後端網站伺服器取得資訊。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!