1,Varish的使用有兩種模式:
第1種 Nginx(負載)+varish(緩存)+WEB
第2種 Varish(緩存和負載)+web
2,varish是以內存作為共享容器的:
內存的大小決定了它的緩存容量。相對於主要以硬盤為存儲的squid來說要高效的多。它適合一些經常查詢且變化不大的靜態內容緩存。
Nginx 圖片和靜態文本給 varish 後端是WEB的8080端口
動態內容給後端WEB 後端是WEB的8080端口
這個架構要看服務器和存儲內容,如果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 { #通過反向代理請求後端IP為192.168.0.5,80端口的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; #對於txt和js緩存一個小時 }
else {
set obj.ttl = 30d; #其余的緩存一天 }
}
Varnish對HTTP協議中的GET、HEAD請求進行緩存,對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