一個高效能的網站伺服器,是每個網站管理者所迫切希望的,因此本文將簡介開源社群中頗富盛名的反向代理伺服器(Reverse Proxy)軟體Varnish(https://varnish-cache.org/),可利用其提供的快取(Cache)功能來加快網頁存取效率,進而提升網站伺服器的服務效能。
vcl_fetch
當Varnish進入到fetch狀態時,便會觸發此函數。使用者可在此函數內加上判斷規則,來決定是否要將資訊內容放入快取空間或是直接回覆給使用者。
vcl_deliver
當Varnish進入到deliver狀態的時候,便會觸發此項函數,可用於將資訊回覆給使用者。
除了上述所提供的內建函數外,Varnish也提供相關的內建變數,提供給使用者設定規則使用。
在此要特別提醒一個觀念,各個狀態會有不同的適合變數,不是一個變數就可適用於各個狀態,例如在deliver狀態時,即表示回覆給使用者,此時才能適用回覆狀態碼(Response Status,Varnish以Resp.status來表示)。
內建變數介紹
接著,分成三大類說明常用的內建變數。
適用於接收到要求的變數
此類變數在各個狀態即可使用,以下分別說明:
req.backend: 相對應的後端網站伺服器主機位址。
req.request: 使用者所使用的HTTP方法(Method),例如GET或POST等。
server.ip:Varnish伺服器端的IP位址。
client.ip:使用者端的IP位址。
req.proto: 使用者端所使用的HTTP通訊協定版本資訊,例如HTTP 1.1。
向後端網站伺服器要求時的變數
向後端網站伺服器要求時的變數,包括以下幾種:
beresp.request: 表示所使用的HTTP方法(Method),例如GET或POST等。
beresp.url: 這是表示所要請求的要求網址(URL)。
beresp.proto: 表示所使用的HTTP通訊協定版本資訊,如HTTP 1.1。
beresp.ttl: 表示快取空間的生存週期,表示快取空間的資料能夠保留的時間(單位為秒)。
回覆給使用者後可使用的變數
回覆給使用者後可使用的變數,包括:
resp.status: 表示回覆給使用者的HTTP狀態碼,例如404。
resp.proto: 這個變數是表示所使用的HTTP通訊協定版本資訊,例如HTTP 1.1。
圖2所示為一個簡單的VCL設定,其中的host就是實際服務的網站伺服器的IP位址。
|
▲圖2 VCL設定範例。 |
以快取空間來增進網站存取效率的實作
本次實作所使用的架構圖,將如圖3所示一般。
|
▲圖3 實作架構圖。 |
先設定varnish.conf組態檔,設定如圖4所示,僅設定後端服務的網站伺服器。
|
▲圖4 varnish.conf組態檔設定內容。 |
緊接著,執行下列指令來啟動Varnish伺服器:
#以/usr/local/varnish/data/的目錄
當成快取空間
varnishd -f varnish.vcl -a
[Varnish伺服器IP]:80 -n /usr/
local/varnish/data/
成功啟動後,Varnish便會常駐於系統中來等候要求,此時可以利用「netstat -anpt | grep varn」指令來檢查是否啟動成功,如圖5所示。
|
▲圖5 檢查是否啟動成功。 |
限載某個來源IP的連線
也可利用Varnish伺服器來設定限制存取的條件,在此以限制某個來源IP的連線為例,設定當「來源IP」想要連線時,就回覆HTTP狀態碼為403(即表示限制該IP的存取)來阻擋該IP的連線,如圖6所示。
|
▲圖6 限制某個來源IP進行連線。 |