這兩天在學習varnish,在學到vcl時,不理解pipe和pass的區別以及如何區分加以應用。通過兩天的搜尋,總算是理清了概念。現在記錄在部落格上跟大家分享。
當 vcl_recv 函式接收到請求時,它要判斷如何處理這個請求。有三種情況 :
呼叫 pass 函式,從後端伺服器呼叫資料。呼叫 pipe 函式,建立客戶端和後端伺服器之間的直接連線,從後端伺服器呼叫資料。
呼叫lookup函式,從快取中查詢應答資料並返回,如果查詢不到,則呼叫pass函式從後端伺服器
呼叫資料 。
在這裡,我就有幾個疑惑:
pass和pipe都從後端伺服器取資料,它們之間有什麼不同呢?在理解這幾個問題前,需要先理解另外一些概念:什麼情況下用pass,什麼情況下用pipe呢?
什麼樣的資料會被快取在varnish中呢?
http 建立連線的過程先說http建立連線的過程(我只寫下大概,因為不是本文的重心,具體的請另外上網查):http 請求的型別:get post head
當瀏覽器想要獲得乙個網頁內容時,如在瀏覽器輸入www.google.com。http 請求的型別:這時瀏覽器開始跟伺服器建立連線,先執行三次握手,確認建立連線。
之後瀏覽器會傳送請求,乙個網頁包含多個內容,如,正文,html**,css**,js**。
如果在html 1.0版本中,請求乙個檔案是需要建立一次連線的,多個請求多個連線。開銷是很大的。
而在html 1.1中,
具有了長連線的特性,允許在keep-live 時間內保持連線,在這段時間內無須
再建立連線就可以發
送多個請求。
請求完成 或 keep-live時間到限,連線斷開。
http 請求的型別有幾種,下面是主要的幾種:總結來說,get是請求相關uri並接受伺服器的返回資料。為了接收資料。get : 請求指定的頁面資訊,並返回實體主體。
head: 只請求頁面的首部。
post: 請求伺服器接受所指定的文件作為對所標識的uri的新的從屬實體。
post是傳送資料給伺服器,伺服器需要對這些資料做相應的處理。為了傳送資料。
以上都明白的話,就可以解答這三個問題了:
pass和pipe都從後端伺服器取資料,它們之間有什麼不同呢?什麼情況下用pass,什麼情況下用pipe呢?
什麼樣的資料會被快取在varnish中呢?
問:pass和pipe都從後端伺服器取資料,它們之間有什麼不同呢?答:當vcl_recv呼叫 pass 函式時,pass將當前請求直接**到後端伺服器。而後續的請求仍然
通過varnish處理。
例如,建立了http連線之後,客戶端順序請求 a.css 、a.png兩個檔案,「當前請求」指的是第乙個
請求,即a.css,a.css被直接**到後端伺服器,不被快取。而後續的a.png則再由varnish來做
處理,varnish會判斷a.png 如何處理。
總結:乙個連線中除了當前請求,其它請求仍然按照正常情況由varnish處理。
而pipe模式則不一樣,當vcl_recv判斷 需要呼叫 pipe 函式時,varnish會在客戶端和伺服器之
間建立一條直接的連線 ,之後客戶端的所有請求都直接傳送給伺服器,繞過varnish,不再由varnish
檢查請求,直到連線斷
開。
什麼情況下用pass,什麼情況下用pipe呢?答:pass 通常只處理靜態頁面。即只在get 和 head 型別的請求中時才適合呼叫pass函式。
另外,需要注意的一點是,pass模式不能處理post請求,為什麼呢?因為post請求一般是傳送
資料給伺服器,需要伺服器接收資料,並處理資料,反饋資料 。是動態的,不作快取。
示例**如下:
if (req.request !="get" && req.request != "head")
那什麼情況下用pipe?由以上陳述可以知,型別是post時用pipe,但是也許還不太清晰。舉個例子,
這些大的檔案是不被快取在varnish中的。
什麼樣的資料會被快取在varnish中呢?答:varnish只快取靜態資料。在網上搜到的varnish快取策略,可以解答這個問題:
varnish快取策略
預設是根椐後端返回的http狀態碼決定是否快取。可以快取的狀態碼如下:
200
203
300
301
302
410
404
varnish現在還不支援ranges請求,所以不會快取206狀態的結果。
管理員可以在vcl的配置檔案中的vcl_fetch部分,加入自已的快取策略,方法是修改beresp.cacheable變數。下面的例子,看後端返回中如果設定了cookie,則不快取:
sub fetch
} 參考文章:
文章末尾總結:學技術不要死扣中文文件,多看英文文件會比較有幫助 。
本文出自 「yeelonⓖ 」 部落格,請務必保留此出處
varnish pipe 和pass的區別分析
這兩天在學習varnish,在學到vcl時,不理解pipe和pass的區別以及如何區分加以應用。通過兩天的搜尋,總算是理清了概念。現在記錄在部落格上跟大家分享。當 vcl recv 函式接收到請求時,它要判斷如何處理這個請求。有三種情況 呼叫pass函式,從後端伺服器呼叫資料。呼叫pipe函式,建立...
varnish pipe 和pass的區別分析
這兩天在學習varnish,在學到vcl時,不理解pipe和pass的區別以及如何區分加以應用。通過兩天的搜尋,總算是理清了概念。現在記錄在部落格上跟大家分享。當 vcl recv 函式接收到請求時,它要判斷如何處理這個請求。有三種情況 呼叫 pass 函式,從後端伺服器呼叫資料。呼叫 pipe 函...
ftp中主動模式 port 與被動模式 PASV
ftp是僅基於tcp的服務,不支援udp。與眾不同的是ftp使用2個埠,乙個資料埠和乙個命令埠 也可叫做控制埠 通常來說這兩個埠是21 命令埠和20 資料埠。但當我們發現根據 ftp工作 方式的不同資料埠並不總是20時,混亂產生了。主動方式的ftp是這樣的 客戶端從乙個任意的非特權埠n n 1024...