Centos 6.5 varnish
源碼編譯需要安裝以下的依賴:
1
2
3
4
5
<code>報錯:</code>
<code>.</code><code>/autogen</code><code>.sh</code>
<code>.</code><code>/autogen</code><code>.sh: line 47: libtoolize: </code><code>command</code> <code>not found</code>
<code>安裝依賴:</code>
<code> </code><code>yum </code><code>install</code> <code>libtool*</code>
<code> </code><code>configure: error: requires an X</code><code>/Open-compatible</code> <code>Curses library</code>
<code> </code><code>yum </code><code>install</code> <code>ncurses-devel -y</code>
<code> </code><code>configure: error: neither libedit nor another readline compatible library found</code>
<code> </code><code>yum </code><code>install</code> <code>libedit-devel -y</code>
rpm包安裝所需的依賴:
1、安裝varnish所需lib,
<code> </code><code>rpm --nosignature -i http:</code><code>//repo</code><code>.varnish-cache.org</code><code>/redhat/varnish-4</code><code>.0</code><code>/el6/x86_64/varnish/varnish-libs-4</code><code>.0.0-1.el6.x86_64.rpm</code>
2、安裝jemalloc,庫檔案可到此連結處下載下傳:ftp-hk.tmapy.cz/fedora/epel/6/x86_64/jemalloc-3.6.0-1.el6.i686.rpm
<code>rpm --nosignature -i http:</code><code>//ftp-hk</code><code>.tmapy.cz</code><code>/fedora/epel/6/x86_64/jemalloc-3</code><code>.6.0-1.el6.x86_64.rpm</code>
#可以去下載下傳合适自己的varnish版本軟體包
<code>http:</code><code>//repo</code><code>.varnish-cache.org</code><code>/redhat/varnish-4</code><code>.0</code><code>/el6/x86_64/varnish/</code>
3、開始安裝,
<code>rpm --nosignature -i http:</code><code>//repo</code><code>.varnish-cache.org</code><code>/redhat/varnish-4</code><code>.0</code><code>/el6/x86_64/varnish/varnish-4</code><code>.0.0-1.el6.x86_64.rpm</code>
安裝完成後,啟動varnish:
<code>service varnish start</code>
HTTP 請求的類型有幾種,下面是主要的幾種:
GET : 請求指定的頁面資訊,并傳回實體主體。
HEAD: 隻請求頁面的首部。
POST: 請求伺服器接受所指定的文檔作為對所辨別的URI的新的從屬實體。
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
檢查請求,直到連接配接斷開。
Request
1、調用 pass 函數,從後端伺服器調用資料。
2、調用 pipe 函數,建立用戶端和後端伺服器之間的直接連接配接,從後端伺服器調用資料。
3、調用lookup函數,從緩存中查找應答資料并傳回,如果查找不到,則調用pass函數從後端伺服器
調用資料 。
varnish vcl配置檔案:
vcl_recv 接受請求
vcl_hash 緩存政策
vcl_fetch 不緩存
vcl_hit 命中
vcl_miss 未命中
<code>if</code> <code>(req.request !=</code><code>"GET"</code> <code>&& req.request != </code><code>"HEAD"</code> <code>&& req.request != </code><code>"PUT"</code> <code>&& req.request != </code><code>"POST"</code> <code>&& req.request !=</code><code>"TRACE"</code> <code>&& req.request != </code><code>"OPTIONS"</code> <code>&& req.request != </code><code>"DELETE"</code><code>) {</code>
<code>return</code> <code>(pipe);</code>
<code>}</code>
#如果不是get和head,那就是post。post屬于發送資料給伺服器,需要伺服器接受資料并處理,屬于動态。
<code>if</code> <code>(req.request != </code><code>"GET"</code> <code>&& req.request != </code><code>"HEAD"</code><code>) {</code>
<code>return</code> <code>(pass);</code>
#認證資訊
<code>if</code> <code>(req.http.Authorization || req.http.Cookie) {</code>
<code>return</code> <code>(lookup);</code>
6
7
<code>hash_data(req.url);</code>
<code>if</code> <code>(req.http.host) {</code>
<code>hash_data(req.http.host);</code>
<code>} </code><code>else</code> <code>{</code>
<code>hash_data(server.ip);</code>
<code>return</code> <code>(</code><code>hash</code><code>);</code>
#sub vcl_deliver 傳回引擎,用戶端提示是否命中
<code>sub vcl_deliver {</code>
<code> </code><code>if</code> <code>(obj.hits > 0) {</code>
<code> </code><code>set</code> <code>resp.http.X-Cache = </code><code>"Hit"</code><code>; </code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>set</code> <code>resp.http.X-Cache = </code><code>"Miss"</code><code>;</code>
<code> </code><code>}</code>
緩存時間的計算方法
預設的緩存時間計算方法如下:
. 先根椐max-age确定緩存時間
看傳回頭中的Cache-Control頭中,有沒有指定s-maxage或max-age資訊,另外,如果後端是一個緩存伺服器,它還會指定一個age頭,表明已經緩存過的時間,這樣需要減去age頭指定的時間,計算出對應的緩存時間。
例1 隻有max-age,沒有age
CacheControl: max-age=86400
緩存時間:86400秒,即一天
例2 同時有max-age和age資訊
Age: 6400
緩存時間:86400 - 6400 = 80000秒
本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1913365