歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux配置

varnish搭建及配置詳解

目的:一台服務器既跑varnish,又跑系統自帶的apache,當然端口肯定不一樣,要測試確定varnish緩存了apache?
環境:RedHat4.8(64位)
IP地址:192.168.5.55
varnish版本:2.1.2
1、下載varnish並安裝,我這裡就不安裝pcre庫了,因為我系統安裝時所有的包都安裝完畢。另外可以到http://varnish-cache.org下載不同的版本,我個人還是建議下載和我一樣的版本,因為1版本和2版本之間的配置文件格式不太一樣,不然N多人又犯頭疼了!
tar -zxvf varnish-2.1.2.tar.gz
cd varnish-2.1.2
./configure --prefix=/usr/local/varnish --enable-dependency-tracking --enable-debugging-symbols --enable-developer-warnings
如果提示找不到no package 'libpcre' found,那麼你需要指定pcre庫的路徑,其實很簡單,你指定你的pcre庫的正確路徑就OK了,我這默認是在/usr/lib目錄下,你的如果是之後源碼安裝的,那麼在你安裝目錄下的lib目錄下,比如你安裝在/usr/local/pcre,那麼庫文件就是/usr/local/pcre/lib/pkgconfig。執行如下命令 :
export PKG_CONFIG_PATH=你的pcre庫的路徑
make
make install

2、基本配置varnish,我先不管裡面的一些函數使用說明介紹了,如果要看的話請看權威指南,默認的varnish的配置文件全是注釋在/usr/local/varnish/etc/varnish/目錄下,這裡我備份一下配置文件,然後新建一個default.vcl文件,內容如下:
##通過backend定義一個名稱為webserver的後端主機,".host"指定後端主機的IP地址或者域名,".port"指定後端主機的端口,這裡也可以定義多台後端服務器,起到輔助分擔和健康檢測機制。
backend webserver {
     .host = "192.168.5.55";
     .port = "9999";
}
##開始調用vcl_recv
sub vcl_recv {
     if (req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For =
            req.http.X-Forwarded-For ", " client.ip;
     } else {
        set req.http.X-Forwarded-For = client.ip;
     }
##如果請求的類型不是GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE,則進入
     if (req.request != "GET" &&
       req.request != "HEAD" &&
       req.request != "PUT" &&
       req.request != "POST" &&
       req.request != "TRACE" &&
       req.request != "OPTIONS" &&
       req.request != "DELETE") {
         return (pipe);
     }
##如果請求的類型不是GET或HEAD,則進入pass模式
     if (req.request != "GET" && req.request != "HEAD") {
         return (pass);
     }
##對zzz.com域名進行緩存加速,後端的服務器apache就是對應的域名www.zzz.com。這個是泛域名的概念
     if (req.http.host ~ "^(.*).zzz.com") {
         set req.backend = webserver;
     }
}
sub vcl_pipe {
       return (pipe);
}
sub vcl_pass {
       return (pass);
}
sub vcl_hash {
       set req.hash += req.url;
       if (req.http.host) {
       set req.hash += req.http.host;
       } else {
       set req.hash += server.ip;
       }
       return (hash);
}
sub vcl_hit {
       if (!obj.cacheable) {
       return (pass);
       }
       return (deliver);
}
sub vcl_miss {
       return (fetch);
}
sub vcl_fetch {
       if (!beresp.cacheable) {
       return (pass);
       }
       if (beresp.http.Set-Cookie) {
       return (pass);
       }
}
下面添加一個Header標識,以判斷緩存是否命中
sub vcl_deliver {
       if (obj.hits > 0) {
       set resp.http.X-Cache = "HIT from www.zzz.com";
       } else {
       set resp.http.X-Cache = "MISS from www.zzz.com";
       }
       return (deliver);
}
這就是一個簡單的實例,如果有別的需求請參考別的文檔!

3、啟動varnish
/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,128m -T 127.0.0.1:200 -a 0.0.0.0:9000
-f是指定配置文件
-s是一種存儲類型和存儲容量,使用的是malloc類型(malloc是一個c函數,用於分配內容空間),128定義多少內存被malloced。
-T是varnish基於文本的管理接口
-a是指定varnish監聽所有IP發給9000端口的http請求。
查看varnish進程
root     13635     1  0 16:33 ?        00:00:00 /usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,128m -T 127.0.0.1:200 -a 0.0.0.0:9000
nobody   13636 13635  0 16:33 ?        00:00:00 /usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,128m -T 127.0.0.1:200 -a 0.0.0.0:9000
查看200端口和9000端口,200是管理端口,9000是代理端口。
netstat -an | grep 9000
tcp        0      0 0.0.0.0:9000                0.0.0.0:*                   LISTEN     
netstat -an | grep 200
tcp        0      0 127.0.0.1:200               0.0.0.0:*                   LISTEN  

4、啟動系統自帶的apache,配置文件基本沒變動,端口改為9999而已。另外在/var/www/html目錄下新建一個index.html測試頁,隨便寫點什麼內容!最後啟動apache服務
/etc/init.d/httpd start
在本機hosts文件加上映射關系
192.168.5.55          www.zzz.com

5、現在應該看到varnish和apache的url是一個網頁,但是不知道是代理還是緩存?
curl http://www.zzz.com:9000          抓取varnish的頁面
hello!!!
curl http://www.zzz.com:9999          抓取apache的頁面
hello!!!

6、varnish配置文件在最後一行加入了Header信息,所有直接抓取報頭就知道緩存是否成功?
curl -I http://www.zzz.com:9000
HTTP/1.1 200 OK
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 15 Oct 2012 07:07:27 GMT
ETag: "1bc893-9-4cc13b0a6a9c0"
Content-Type: text/html; charset=UTF-8
Content-Length: 9
Date: Tue, 13 Nov 2012 08:45:45 GMT
X-Varnish: 337763601
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from www.zzz.com    這裡的MISS表示此次訪問沒有從緩存讀取
再次打開這個頁面,查看網頁的頭信息。
curl -I http://www.zzz.com:9000
HTTP/1.1 200 OK
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 15 Oct 2012 07:07:27 GMT
ETag: "1bc893-9-4cc13b0a6a9c0"
Content-Type: text/html; charset=UTF-8
Content-Length: 9
Date: Tue, 13 Nov 2012 08:45:47 GMT
X-Varnish: 337763602 337763601
Age: 1
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from www.zzz.com    這裡的HIT表示此次訪問從緩存讀取,也就是緩存命中

7、配置一下緩存時間吧!我在varnish的配置文件裡面配置沒有生效,不知道為什麼?QQ一哥們說一般都是在後端服務器配置緩存時間,所以這個問題暫不糾結了,另外再說一下varnish如果不配置緩存時間,默認是兩分鐘,也就是120秒。不信可以拿一個腳本測試一下!打開apache的配置文件httpd.conf,在最後面加上如下內容:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A604800
ExpiresByType text/css A604800
ExpiresByType text/html A125     其實我測試暫時只有這一行起到作用,別的可加可不加,時間是125秒
</IfModule>

8、重啟apache服務
/etc/init.d/httpd restart

9、測試看看緩存有沒有生效?
curl -I http://www.zzz.com:9000
HTTP/1.1 200 OK
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 15 Oct 2012 07:07:27 GMT
ETag: "1bc893-9-4cc13b0a6a9c0"
Cache-Control: max-age=125                          這裡表示緩存時間
Expires: Tue, 13 Nov 2012 09:14:28 GMT              這裡表示緩存過期時間,需要加8小時算
Content-Type: text/html; charset=UTF-8
Content-Length: 9
Date: Tue, 13 Nov 2012 09:12:23 GMT
X-Varnish: 337763610
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from www.zzz.com
說明生效了!

10、查看varnish系統緩存的狀態
/usr/local/varnish/bin/varnishstat
0+00:44:05                                                                                                                                                          nagios-server
Hitrate ratio:        1        1        1
Hitrate avg:     0.4545   0.4545   0.4545
          11         0.00         0.00 Client connections accepted
          11         0.00         0.00 Client requests received
           5         0.00         0.00 Cache hits
           6         0.00         0.00 Cache misses
           6         0.00         0.00 Backend conn. success
           6         0.00         0.00 Fetch with Length
          10          .            .   N struct sess_mem
           1          .            .   N struct objectcore
           1          .            .   N struct objecthead
          10          .            .   N worker threads
          10         0.00         0.00 N worker threads created
           1          .            .   N backends
           6          .            .   N expired objects
           1          .            .   N LRU moved objects
           1         0.00         0.00 Objects sent with write
          11         0.00         0.00 Total Sessions
          11         0.00         0.00 Total Requests
           6         0.00         0.00 Total fetch
        4223         0.00         1.60 Total header bytes
           9         0.00         0.00 Total body bytes
          11         0.00         0.00 Session Closed
          11         0.00         0.00 Session Linger
        2427         2.00         0.92 SHM records
        1850         2.00         0.70 SHM writes
          12         0.00         0.00 SMA allocator requests
        5126          .            .   SMA bytes allocated
        5126          .            .   SMA bytes free
           6         0.00         0.00 Backend requests made
           1         0.00         0.00 N vcl total
           1         0.00         0.00 N vcl available
           1          .            .   N total active purges
           2         0.00         0.00 N new purges added
           1         0.00         0.00 N old purges deleted
          11         0.00         0.00 HCB Lookups without lock
           6         0.00         0.00 HCB Lookups with lock
           6         0.00         0.00 HCB Inserts
        2645         1.00         1.00 Client uptime
以上各字段不解釋了,參考權威指南吧!

11、管理緩存內容,清除緩存內容的命令格式
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:200 puger.url <regexp>
列出最近清除的url列表的命令如下:
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:200 purge.list
清除所有的緩存
/usr/local/varnish/bin/varnishadm -T 127.0.0.1:200 purge.url ^.*$
另外還可以通過管理端口來清除緩存頁面!
Copyright © Linux教程網 All Rights Reserved