日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁西西教程操作系統(tǒng) → linux下面Varnish的安裝配置教程

      linux下面Varnish的安裝配置教程

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:IBM時(shí)間:2013/5/12 19:57:05字體大。A-A+

      作者:西西點(diǎn)擊:98次評(píng)論:0次標(biāo)簽: linux

      Varnish 簡介

      Varnish 是一款高性能且開源的反向代理服務(wù)器和 HTTP 加速器,其采用全新的軟件體系機(jī)構(gòu),和現(xiàn)在的硬件體系緊密配合,與傳統(tǒng)的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等諸多優(yōu)點(diǎn),很多大型的網(wǎng)站都開始嘗試使用 varnish 來替換 squid,這些都促進(jìn) varnish 迅速發(fā)展起來。

      官方網(wǎng)站

      https://www.varnish-cache.org/installation/debian/ 

      目前最新版本是。3.0.3


      1. curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
      2. echo "deb http://repo.varnish-cache.org/debian/ wheezy varnish-3.0" >> /etc/apt/sources.list
      3. apt-get update
      4. apt-get install varnish

      挪威的最大的在線報(bào)紙 Verdens Gang(vg.no) 使用 3 臺(tái) Varnish 代替了原來的 12 臺(tái) Squid,性能比以前更好,這是 Varnish 最成功的應(yīng)用案例。

      Varnish 文件緩存的工作流程

      Varnish 與一般服務(wù)器軟件類似,分為 master 進(jìn)程和 child 進(jìn)程。Master 進(jìn)程讀入存儲(chǔ)配置文件,調(diào)用合適的存儲(chǔ)類型,然后創(chuàng)建 / 讀入相應(yīng)大小的緩存文件,接著 master 初始化管理該存儲(chǔ)空間的結(jié)構(gòu)體,然后 fork 并監(jiān)控 child 進(jìn)程。Child 進(jìn)程在主線程的初始化的過程中,將前面打開的存儲(chǔ)文件整個(gè) mmap 到內(nèi)存中,此時(shí)創(chuàng)建并初始化空閑結(jié)構(gòu)體,掛到存儲(chǔ)管理結(jié)構(gòu)體,以待分配。Child 進(jìn)程分配若干線程進(jìn)行工作,主要包括一些管理線程和很多 worker 線程。

      接著,開始真正的工作,varnish 的某個(gè)負(fù)責(zé)接收新 HTTP 連接線程開始等待用戶,如果有新的 HTTP 連接過來,它總負(fù)責(zé)接收,然后喚醒某個(gè)等待中的線程,并把具體的處理過程交給它。Worker 線程讀入 HTTP 請求的 URI,查找已有的 object,如果命中則直接返回并回復(fù)用戶。如果沒有命中,則需要將所請求的內(nèi)容,從后端服務(wù)器中取過來,存到緩存中,然后再回復(fù)。

      分配緩存的過程是這樣的:它根據(jù)所讀到 object 的大小,創(chuàng)建相應(yīng)大小的緩存文件。為了讀寫方便,程序會(huì)把每個(gè) object 的大小變?yōu)樽罱咏浯笮〉膬?nèi)存頁面倍數(shù)。然后從現(xiàn)有的空閑存儲(chǔ)結(jié)構(gòu)體中查找,找到最合適的大小的空閑存儲(chǔ)塊,分配給它。如果空閑塊沒有用完,就把多余的內(nèi) 存另外組成一個(gè)空閑存儲(chǔ)塊,掛到管理結(jié)構(gòu)體上。如果緩存已滿,就根據(jù) LRU 機(jī)制,把最舊的 object 釋放掉。

      釋放緩存的過程是這樣的:有一個(gè)超時(shí)線程,檢測緩存中所有 object 的生存期,如果超初設(shè)定的 TTL(Time To Live)沒有被訪問,就刪除之,并且釋放相應(yīng)的結(jié)構(gòu)體及存儲(chǔ)內(nèi)存。注意釋放時(shí)會(huì)檢查該存儲(chǔ)內(nèi)存塊前面或后面的空閑內(nèi)存塊,如果前面或后面的空閑內(nèi)存和該 釋放內(nèi)存是連續(xù)的,就將它們合并成更大一塊內(nèi)存。

      整個(gè)文件緩存的管理,沒有考慮文件與內(nèi)存的關(guān)系,實(shí)際上是將所有的 object 都考慮是在內(nèi)存中,如果系統(tǒng)內(nèi)存不足,系統(tǒng)會(huì)自動(dòng)將其換到 swap 空間,而不需要 varnish 程序去控制。

      Varnish 安裝

      下載 varnish 安裝包

      建議下載最新穩(wěn)定版本(現(xiàn)在最新 varnish 版本為 3.0.2),varnish 提供源代碼安裝包和可執(zhí)行程序安裝包,按照您的習(xí)慣下載適合您平臺(tái)的任一安裝包即可。

      安裝 varnish

      源代碼安裝包安裝

      首先安裝 pcre 庫,pcre 庫是為兼容正則表達(dá)式,如果不安裝,在安裝 varnish2.0 版本以上時(shí),會(huì)提示找不到 pcre 庫。以下是 pcre 的安裝過程,其代碼如清單 1 所示:

      清單 1. pcre 庫安裝代碼 
      tar zxvf pcre.tar.gz 
           cd pcre/ 
           ./configure --prefix=/usr/local/pcre/ 
           Make && make install

      安裝 varnish,其代碼如清單 2 所示:


      清單 2. varnish 安裝代碼 
      tar xzvf varnish-3.0.2.tar.gz 
              cd varnish-3.0.2 
              export PKG_CONFIG_PATH =/usr/local/pcre/lib/pkgconfig 
              ./configure --prefix=/usr/local/varnish  	
              make 
              make install

      可執(zhí)行程序安裝包安裝


      RedHat 系統(tǒng)環(huán)境下的安裝 varnish,您需要安裝以下軟件:automake、autoconf、libtool、ncurses-devel、libxslt、groff、 pcre-devel、pkgconfig,然后進(jìn)行 varnish 的安裝,安裝代碼如清單 3 所示:


      清單 3. varnish 安裝代碼 
      rpm -i varnish-2.1.4-2.el5.x86_64.rpm

      啟動(dòng) varnish


      清單 4. varnish 啟動(dòng)代碼 
      varnishd -f /etc/varnish/default.vcl -s file,/var/varnish_cache,1G \
       -T 127.0.0.1:2000 -a 0.0.0.0:9082

      各參數(shù)的含義如下:

      -f 指定 varnish 的配置文件位置

      -s 指定 varnish 緩存存放的方式,常用的方式有:“-s file,,”。

      -T address:port 設(shè)定 varnish 的 telnet 管理地址及其端口

      -a address:port 表示 varnish 對(duì) http 的監(jiān)聽地址及其端口

      Varnish 配置

      VCL 簡介

      VCL(varnish configuration language)是 varnish 配置語言,其用來定義 varnish 的存取策略。VCL 語法比較簡單,跟 C 和 Perl 比較相似。主要有以下幾點(diǎn):

      • 塊是由花括號(hào)分隔,語句以分號(hào)結(jié)束,使用‘ # ’符號(hào)可以添加注釋。
      • VCL 使用指定運(yùn)算符“=”、比較運(yùn)算符“==”、邏輯運(yùn)算符“!,&&,!!”等形式,還支持正則表達(dá)式和用“~”進(jìn)行 ACL 匹配運(yùn)算。
      • VCL 沒有用戶自己定義的變量,你可以在 backend、request 或 object 上設(shè)置變量值,采用 set 關(guān)鍵字進(jìn)行設(shè)置。例如 set req.backend = director_employeeui;
      • 兩個(gè)字符串的連接,他們之間沒有任何運(yùn)算符。代碼如清單 5 所示:

      清單 5. 字符串連接代碼 
      set req.http.X-hit = " hit" "it";

      • \”字符在 VCL 里沒有特別的含義,這點(diǎn)與其他語言略有不同。
      • VCL 可以使用 set 關(guān)鍵字設(shè)置任何 HTTP 頭,可以使用 remove 或是 unset 關(guān)鍵字移除 HTTP 頭。
      • VCL 有 if/else 的判斷語句,但是沒有循環(huán)語句。

      VCL backend

      聲明并初始化一個(gè)后端對(duì)象,代碼如清單 6 所示


      清單 6. backend 聲明代碼 
      backend www { 
      	   .host = "www.example.com"; 
      	   .port = "9082"; 
      	 }

      后端對(duì)象的使用,代碼如清單 7 所示


      清單 7. backend 的使用代碼 
      if (req.http.host ~ "^(www.)?example.com$") { 
      	    set req.backend = www; 
      	 }

      VCL 后端的集合 director

      VCL 可以把多個(gè) backends 聚合成一個(gè)組,這些組被叫做 director,這樣可以增強(qiáng)性能和彈力,當(dāng)組里一個(gè) backend 掛掉后,可以選擇另一個(gè)健康的 backend。VCL 有多種 director,不同的 director 采用不同的算法選擇 backend,主要有以下幾種:

      • The random director

      Random director 會(huì)根據(jù)所設(shè)置的權(quán)值(weight)來選擇 backend,.retries 參數(shù)表示嘗試找到一個(gè) backend 的最大次數(shù),.weight 參數(shù)表示權(quán)值

      • The round-robin director

      Round-robin director 在選擇 backend 時(shí),會(huì)采用循環(huán)的方式依次選擇。

      • The client director

      Client director 根據(jù) client.identity 來選擇 backend,您可以設(shè)置 client.identity 的值為 session cookie 來標(biāo)識(shí) backend。

      backend probes

      VCL 可以設(shè)置 probe 來檢測一個(gè) backend 是否健康,定義一個(gè) backend probes 代碼如清單 8 所示:


      清單 8. 定義 backend probes 代碼 
      backend www { 
      	  .host = "www.example.com"; 
      	  .port = "9082"; 
      	  .probe = { 
      	    .url = "/test.jpg";// 哪個(gè) url 需要 varnish 請求
      	    .timeout = 1 s;// 等待多長時(shí)間超時(shí)
      	    .interval = 5s// 檢查的時(shí)間間隔
                   .window = 5;// 維持 5 個(gè) sliding window 的結(jié)果
      	    .threshold = 3;// 至少有三次 window 是成功的,就宣告 backend 健康
      	  } 
      	 }

      ACL

      ACL 可創(chuàng)建一個(gè)客戶端的訪問控制列表,你可以使用 ACL 控制哪些客戶端可以訪問,哪些客戶端禁止訪問。定義 ACL 代碼如清單 9 所示:


      清單 9. ACL 定義代碼 
      Acl local{ 
      	   "localhost"; 
      	   "192.0.2.0"/24; 
      	   !"192.0.2.23";// 除去該 IP 
      	 }

      VCL 內(nèi)置函數(shù)

      vcl_recv 函數(shù)

      用于接收和處理請求。當(dāng)請求到達(dá)并成功接收后被調(diào)用,通過判斷請求的數(shù)據(jù)來決定如何處理請求。例如如何響應(yīng)、怎么響應(yīng)、使用哪個(gè)后端服務(wù)器等。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      pass:表示進(jìn)入 pass 模式,把請求控制權(quán)交給 vcl_pass 函數(shù)。

      pipe:表示進(jìn)入 pipe 模式,把請求控制權(quán)交給 vcl_pipe 函數(shù)。

      lookup:表示進(jìn)入 lookup 模式,把請求控制權(quán)交給 lookup 指令處理,在緩存中查找被請求的對(duì)象,并且根據(jù)查找的結(jié)果把控制權(quán)交給函數(shù) vcl_hit 或函數(shù) vcl_miss。

      error code [reason]:表示返回“code”給客戶端,并放棄處理該請求!癱ode”是錯(cuò)誤標(biāo)識(shí),例如 200 和 405 等。“reason”是錯(cuò)誤提示信息。

      vcl_pipe 函數(shù)

      此函數(shù)在進(jìn)入 pipe 模式時(shí)被調(diào)用,用于將請求直接傳遞至后端主機(jī),在請求和返回的內(nèi)容沒有改變的情況下,將不變的內(nèi)容返回給客戶端,直到這個(gè)連接被關(guān)閉。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      error code [reason]。

      pipe。

      vcl_pass 函數(shù)

      此函數(shù)在進(jìn)入 pass 模式時(shí)被調(diào)用,用于將請求直接傳遞至后端主機(jī)。后端主機(jī)在應(yīng)答數(shù)據(jù)后將應(yīng)答數(shù)據(jù)發(fā)送給客戶端,但不進(jìn)行任何緩存,在當(dāng)前連接下每次都返回最新的內(nèi)容。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      error code [reason]。

      pass。

      restart 重新啟動(dòng)流程,增加啟動(dòng)次數(shù),如果重新啟動(dòng)次數(shù)高于 max_restarts 發(fā)出一個(gè)錯(cuò)誤警告

      vcl_hash

      當(dāng)您想把一個(gè)數(shù)據(jù)添加到 hash 上時(shí),調(diào)用此函數(shù)。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      Hash。

      vcl_hit 函數(shù)

      在執(zhí)行 lookup 指令后,在緩存中找到請求的內(nèi)容后將自動(dòng)調(diào)用該函數(shù)。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      deliver:表示將找到的內(nèi)容發(fā)送給客戶端,并把控制權(quán)交給函數(shù) vcl_deliver。

      error code [reason] 。

      pass。

      restart 重新啟動(dòng)流程,增加啟動(dòng)次數(shù),如果重新啟動(dòng)次數(shù)高于 max_restarts 發(fā)出一個(gè)錯(cuò)誤警告

      vcl_miss 函數(shù)

      在執(zhí)行 lookup 指令后,在緩存中沒有找到請求的內(nèi)容時(shí)自動(dòng)調(diào)用該方法。此函數(shù)可用于判斷是否需要從后端服務(wù)器獲取內(nèi)容。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      fetch:表示從后端獲取請求的內(nèi)容,并把控制權(quán)交給 vcl_fetch 函數(shù)。

      error code [reason] 。

      pass。

      vcl_fetch 函數(shù)

      在后端主機(jī)更新緩存并且獲取內(nèi)容后調(diào)用該方法,接著,通過判斷獲取的內(nèi)容來決定是將內(nèi)容放入緩存,還是直接返回給客戶端。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      error code [reason]。

      pass。

      deliver。

      esi。

      restart 重新啟動(dòng)流程,增加啟動(dòng)次數(shù),如果重新啟動(dòng)次數(shù)高于 max_restarts 發(fā)出一個(gè)錯(cuò)誤警告

      vcl_deliver 函數(shù)

      將在緩存中找到請求的內(nèi)容發(fā)送給客戶端前調(diào)用此方法。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      error code [reason]。

      deliver。

      restart 重新啟動(dòng)流程,增加啟動(dòng)次數(shù),如果重新啟動(dòng)次數(shù)高于 max_restarts 發(fā)出一個(gè)錯(cuò)誤警告

      vcl_error

      出現(xiàn)錯(cuò)誤時(shí)調(diào)用此函數(shù)。

      此函數(shù)一般以如下幾個(gè)關(guān)鍵字結(jié)束。

      deliver。

      restart。

      VCL 處理流程

      VCL 處理的流程圖如圖 1 所示


      圖 1.VCL 處理流程 
      圖 1.VCL 處理流程 

      Varnish 處理 HTTP 請求的過程大致分為如下幾個(gè)步驟。

      • Receive 狀態(tài)(vcl_recv)。也就是請求處理的入口狀態(tài),根據(jù) VCL 規(guī)則判斷該請求應(yīng)該 pass(vcl_pass)或是 pipe(vcl_pipe),還是進(jìn)入 lookup(本地查詢)。
      • Lookup 狀態(tài)。進(jìn)入該狀態(tài)后,會(huì)在 hash 表中查找數(shù)據(jù),若找到,則進(jìn)入 hit(vcl_hit)狀態(tài),否則進(jìn)入 miss(vcl_miss)狀態(tài)。
      • Pass(vcl_pass)狀態(tài)。在此狀態(tài)下,會(huì)直接進(jìn)入后端請求,即進(jìn)入 fetch(vcl_fetch)狀態(tài)
      • Fetch(vcl_fetch)狀態(tài)。在 fetch 狀態(tài)下,對(duì)請求進(jìn)行后端獲取,發(fā)送請求,獲得數(shù)據(jù),并根據(jù)設(shè)置進(jìn)行本地存儲(chǔ)。
      • Deliver(vcl_deliver)狀態(tài)。將獲取到的數(shù)據(jù)發(fā)給客戶端,然后完成本次請求。

      VCL 內(nèi)置公共變量

      VCL 內(nèi)置的公共變量可以用在不同的 VCL 函數(shù)中,下面根據(jù)使用的不同階段進(jìn)行介紹

      當(dāng)請求到達(dá)時(shí),可以使用的公共變量表 1 所示


      表 1. 請求到達(dá)時(shí)可用公共變量 
      公共變量名含義
      req.backend指定對(duì)應(yīng)的后端主機(jī)
      server.ip表示服務(wù)器 IP
      client.ip表示客戶端 IP
      req.quest只是請求的類型,例如 GET、HEAD 等
      req.url指定請求的地址
      req.proto表示客戶端發(fā)起請求的 HTTP 協(xié)議版本
      req.http.header表示對(duì)應(yīng)請求中的 HTTP 頭部信息
      req.restarts表示重啟次數(shù),默認(rèn)最大值為 4

      Varnish 在向后端主機(jī)請求時(shí),可是用的公共變量如表 2 所示


      表 2. 向后端主機(jī)請求時(shí)可用公共變量 
      公共變量名含義
      beresp.requset指定請求類型,例如 GET、HEAD 等
      beresp.url表示請求地址
      beresp.proto表示客戶端發(fā)起請求的 HTTP 協(xié)議版本
      beresp.http.header表示對(duì)應(yīng)請求中 HTTP 頭部信息
      beresp.ttl表示緩存的生存周期,cache 保留時(shí)間(s)

      從 cache 或是后端主機(jī)獲取內(nèi)容后,可以使用的公共變量如表 3 所示


      表 3. 后端主機(jī)獲取內(nèi)容時(shí)可使用公共變量 
      公共變量名含義
      obj.status返回內(nèi)容的請求狀態(tài)碼,例如 200、302、504 等
      obj.cacheable返回的內(nèi)容是否可以緩存
      obj.valid是否有效的 HTTP 請求
      obj.response返回內(nèi)容的請求狀態(tài)信息
      obj.proto返回內(nèi)容的 HTTP 版本
      obj.ttl返回內(nèi)容的生存周期,也就是緩存時(shí)間,單位秒
      obj.lastuse返回上一次請求到現(xiàn)在的時(shí)間間隔,單位秒

      對(duì)客戶端應(yīng)答時(shí),可以使用的公共變量如表 4 所示

      表 4. 對(duì)客戶端相應(yīng)時(shí)可使用公共變量 
      公共變量名稱含義
      resp.status返回給客戶端的 HTTP 代碼狀態(tài)
      resp.proto返回給客戶端的 HTTP 協(xié)議版本
      resp.http.header返回給客戶端的 HTTP 頭部消息
      resp.response返回給客戶端的 HTTP 頭部狀態(tài)

      VCL 調(diào)試

      VCL 為配置文件語言,無法像 c/c++ 那樣進(jìn)行單步調(diào)試,當(dāng) VCL 運(yùn)行的效果和預(yù)期效果不一樣時(shí),很難發(fā)現(xiàn)哪出現(xiàn)邏輯錯(cuò)誤,這時(shí)除了查看代碼查找錯(cuò)誤外,我們還可以采用內(nèi)置 C 語言和瀏覽器查看返回對(duì)象中的狀態(tài)來查找邏輯的錯(cuò)誤。

      我們可以采用內(nèi)置 C 語言來打印相應(yīng)的信息,例如我們可以在相應(yīng)的地方打印信息,來查看 VCL 流程的執(zhí)行是否正確。內(nèi)置 C 語言打印信息代碼如清單 10 所示:


      清單 10. 打印信息代碼 
      C{ 
      	    #include// 首先要包含頭文件
            }C 
            C{ 
      	    Syslog(LOG_INFO,"VCL run here in function xxx in line xxx"); 
            }C

      啟動(dòng) varnish 后,我們可以采用 tail -f /var/log/messages 命令在 /var/log/messages 中查看相應(yīng)的打印信息。查看的打印信息如圖 2 所示:


      圖 2. varnish 打印信息 
      圖 2. varnish 打印信息 

      我們還可以將某些變量的值設(shè)置到返回給瀏覽器的對(duì)象上,然后在瀏覽器中查看該變量的值。設(shè)置變量值代碼如清單 11 所示:


      清單 11. varnish 變量設(shè)置代碼 
      set beresp.http.X-Cookie-Debug-req-cookie = req.http.Cookie;

      在 chrome 瀏覽器中查看 beresp.http.X-Cookie-Debug-req-cookie 的值,結(jié)果如圖 3 所示

      圖 3. 在瀏覽器中查看 varnish 變量的值 
      圖 3. 在瀏覽器中查看 varnish 變量的值

      小結(jié)

      本文介簡單介紹了 varnish,并對(duì)其工作流程、安裝以及配置進(jìn)行了詳細(xì)講解。通過本文,可以很快的掌握 varnish。


      常用操作的命令

      清除所有緩存
      /usr/local/varnish/bin/varnishadm -T 192.168.9.201:3000 url.purge *$

      清除image目錄下所有緩存 
      /usr/local/varnish/bin/varnishadm -T 192.168.9.201:3000 url.purge /image/

      查看Varnish服務(wù)器連接數(shù)與命中率
      /usr/local/varnish/bin/varnishstat –n /data/varnish/cache/varnish_cache.data

      #============================ 內(nèi)核優(yōu)化 ==============================
      vi /etc/sysctl.conf
      net.ipv4.tcp_syncookies = 1
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_tw_recycle = 1
      #net.ipv4.tcp_fin_timeout = 30
      #net.ipv4.tcp_keepalive_time = 300
      net.ipv4.ip_local_port_range = 1024 65000
      net.ipv4.tcp_max_syn_backlog = 8192
      net.ipv4.tcp_max_tw_buckets = 5000

      net.ipv4.tcp_max_syn_backlog = 65536
      net.core.netdev_max_backlog =  32768
      net.core.somaxconn = 32768

      net.core.wmem_default = 8388608
      net.core.rmem_default = 8388608
      net.core.rmem_max = 16777216
      net.core.wmem_max = 16777216

      net.ipv4.tcp_timestamps = 0
      net.ipv4.tcp_synack_retries = 2
      net.ipv4.tcp_syn_retries = 2

      net.ipv4.tcp_tw_recycle = 1
      #net.ipv4.tcp_tw_len = 1
      net.ipv4.tcp_tw_reuse = 1

      net.ipv4.tcp_mem = 94500000 915000000 927000000
      net.ipv4.tcp_max_orphans = 3276800

      /sbin/sysctl -p

      #===================== Varnish添加到服務(wù)自啟動(dòng) ======================
      配置啟動(dòng)文件
      vi /etc/init.d/varnish
      #! /bin/sh
      #
      # varnish Control the varnish HTTP accelerator
      #
      # chkconfig: - 90 10
      # description: Varnish is a high-perfomance HTTP accelerator
      # processname: varnishd
      # config: /etc/sysconfig/varnish
      # pidfile: /var/run/varnish/varnishd.pid

      ### BEGIN INIT INFO
      # Provides: varnish
      # Required-Start: $network $local_fs $remote_fs
      # Required-Stop: $network $local_fs $remote_fs
      # Should-Start: $syslog
      # Short-Description: start and stop varnishd
      # Description: Varnish is a high-perfomance HTTP accelerator
      ### END INIT INFO

      # Source function library.
      . /etc/init.d/functions

      retval=0
      pidfile=/var/run/varnish.pid

      exec="/usr/local/varnish/sbin/varnishd"
      prog="varnishd"
      config="/usr/local/varnish/etc/varnish/varnish"
      lockfile="/var/lock/subsys/varnish"

      # Include varnish defaults
      [ -e /usr/local/varnish/etc/varnish/varnish ] && . /usr/local/varnish/etc/varnish/varnish


      start() {

          if [ ! -x $exec ]
          then
              echo $exec not found
              exit 5
          fi

          if [ ! -f $config ]
          then
              echo $config not found
              exit 6
          fi
          echo -n "Starting varnish HTTP accelerator: "

          # Open files (usually 1024, which is way too small for varnish)
          ulimit -n ${NFILES:-131072}

          # Varnish wants to lock shared memory log in memory. 
          ulimit -l ${MEMLOCK:-82000}

              # $DAEMON_OPTS is set in /etc/sysconfig/varnish. At least, one
              # has to set up a backend, or /tmp will be used, which is a bad idea.
          if [ "$DAEMON_OPTS" = "" ]; then
              echo "\$DAEMON_OPTS empty."
              echo -n "Please put configuration options in $config"
              return 6
          else
              # Varnish always gives output on STDOUT
              daemon   $exec -P $pidfile "$DAEMON_OPTS" > /dev/null 2>&1
              retval=$?
              if [ $retval -eq 0 ]
              then
                  touch $lockfile
                  echo_success
                  echo
              else
                  echo_failure
              fi
              return $retval
          fi
      }

      stop() {
          echo -n "Stopping varnish HTTP accelerator: "
          killproc $prog
          retval=$?
          echo
          [ $retval -eq 0 ] && rm -f $lockfile
          return $retval
      }

      restart() {
          stop
          start
      }

      reload() {
          restart
      }

      force_reload() {
          restart
      }

      rh_status() {
          status $prog
      }

      rh_status_q() {
          rh_status >/dev/null 2>&1
      }

      # See how we were called.
      case "$1" in
          start)
              rh_status_q && exit 0
              $1
              ;;
          stop)
              rh_status_q || exit 0
              $1
              ;;
          restart)
              $1
              ;;
          reload)
              rh_status_q || exit 7
              $1
              ;;
          force-reload)
              force_reload
              ;;
          status)
              rh_status
              ;;
          condrestart|try-restart)
              rh_status_q || exit 0
              restart
              ;;
          *)
          echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"

          exit 2
      esac

      exit $?

      varnish的配置調(diào)用文件,是用來告訴程序從哪里讀取配置文件,啟動(dòng)參數(shù)有哪些等

      vi /usr/local/varnish/etc/varnish
      # Configuration file for varnish
      #
      # /etc/init.d/varnish expects the variable $DAEMON_OPTS to be set from this
      # shell script fragment.
      #

      # Maximum number of open files (for ulimit -n)
      NFILES=131072

      # Locked shared memory (for ulimit -l)
      # Default log size is 82MB + header
      MEMLOCK=1000000

      ## Alternative 2, Configuration with VCL
      DAEMON_OPTS="-a 192.168.9.201:80 \
                   -f /usr/local/varnish/etc/varnish/kerry.vcl \
                   -T 192.168.9.201:3000 \
                   -u www -g www \
                   -n /data/varnish/cache \
                   -s file,/data/varnish/cache/varnish_cache.data,1G"

      添加到系統(tǒng)服務(wù),開機(jī)自啟動(dòng)
      chmod +x /etc/init.d/varnish 
      /sbin/chkconfig --add varnish
      /sbin/chkconfig --level 2345 varnish on

      開啟varnish
      /etc/init.d/varnish start

      關(guān)閉varnish
      /etc/init.d/varnish stop



        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)