安裝varish作爲緩存和代理

1,有兩種模式:
1)  Nginx(負載)+varish(緩存)+WEB
2)  Varish(緩存和負載)+web
Varish的負載我沒有試過,但是感覺用第一種模式可以取得更好的擴展性和高可用性。
   
Nginx  輪詢轉發到後臺三臺 varish 後連接三個WEB 連接數據庫

 

2varish是以內存作爲共享容器的,內存的大小決定了它的緩存容量。相對於主要以硬盤爲存儲的squid來說要高效的多。它適合一些經常查詢且變化不大的靜態內容緩存。
    
     Nginx  圖片和靜態文本給 varish 後端是WEB8080端口
            動態內容給後端WEB  後端是WEB8080端口
     這個架構要看服務器和存儲內容,如果nginx不用做反向代理以支持後臺諸多應用的話,那麼單就nginx來說,利用proxy_cache模塊也可以支持本地緩存。它緩存在硬盤上,性能和squid相差不大,但是穩定性和易用性要好的多。

 

3,安裝varish
    1創建用戶和組,賦予權限

groupadd www

useradd -g www www

mkdir -p /car/vcache

chown -R www:www /var/vcache

   

 2)創建varnish日誌目錄並授權

mkdir -p /var/log/varnish

chmod +w /var/log/varnish

chown -R www:www /var/log/varnish

   

 3編譯安裝varnish

tar zxvf varnish-1.1.2.tar.gz

cd varnish-1.1.2

./configure --prefix=/usr/local/varnish

make && make install

   

 4創建並修改配置文件

vi /usr/local/varnish/vcl/conf

 

backend default {                           #通過反向代理請求後端IP192.168.0.580端口的WEB服務器可以是本機也可以是後臺

                  .host = "192.168.0.151";

                  .port = "81";

}

 

acl purge {                                      #允許這三個來源的IP通過PURGE方法清除緩存

       "localhost";

       "127.0.0.1";

       "192.168.1.0"/24;

}

 

sub vcl_recv {

       if (req.request == "PURGE") {

               if (!client.ip ~ purge) {

                       error 405 "Not allowed.";    #405錯誤顯示

               }

              return(lookup);

       }

 

       if (req.http.host ~ "^blog.s135.com") {

               set req.backend = default;

               if (req.request != "GET" && req.request != "HEAD") {

                return(pipe);

               }

               else {

                return (lookup);

               }

       }

       else {

               error 404 "Not in cache"; #404錯誤顯示

               return(lookup);

       }

}

 

sub vcl_hit {

       if (req.request == "PURGE") {

               set obj.ttl = 0s;

               error 200 "Purged.";

       }

}

 

sub vcl_miss {

       if (req.request == "PURGE") {

               error 404 "Not in cache.";

       }

}

 

sub vcl_fetch {                                            

       if (req.request == "GET" && req.url ~ "\.(txt|js)$") {

              set obj.ttl = 3600s;                         #對於txtjs緩存一個小時

       }

       else {

               set obj.ttl = 30d;                     #其餘的緩存一天

       }

}

VarnishHTTP協議中的GETHEAD請求進行緩存POST請求透過讓其直接訪問後端Web服務器。之所以這樣配置,是因爲POST請求一般是發送數據給服務器的,需要服務器接收、處理,所以不緩存;

 

   5)啓動

ulimit -SHn 51200 

/usr/local/varnish/sbin/varnishd -a :80 -b 192.168.0.151:81 -p thread_pool_max=1500 -p thread_pools=5 -p listen_depth=512  -w 1,10000,120

 

 6將訪問日誌寫入訪問文件

/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/log/varnish/varnish.log &

 

 7)查看狀態
8)測試
我們用varish監聽80端口,同時將數據來源轉向到監聽81端口的Apache
訪問主頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章