varnish

                                    varnishphp

主機環境: rhel6 selinux and iptables disabledhtml

實驗主機: 172.25.45.250linux

Varnish    172.25.45.11web

Apache    172.25.45.12後端

Apache    172.25.45.13緩存

處理過程大體分爲以下幾個步驟:服務器

(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 負載均衡

Pipe,或者進入 Lookup(本地查詢)ide

(2)Lookup 狀態,進入此狀態後,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,不然進測試

miss 狀態。

(3)Pass 狀態,在此狀態下,會進入後端請求,即進入 fetch 狀態。

(4)Fetch 狀態,Fetch 狀態下,對請求進行後端的獲取,發送請求,得到數據,並進行本地

的存儲。

(5)Deliver 狀態, 將獲取到的數據發送給客戶端,而後完成本次請求

 

 

1. 安裝

http://repo.varnish-cache.org/redhat/varnish-3.0/el6/x86_64/

yum localinstall -y varnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm

2. 配置

# vi /etc/varnish/default.vcl

###配置一個後端服務器

backend web1 {

.host = "172.25.45.12";

.port = "80";

}

###配置 varnish 服務端口

# vi /etc/sysconfig/varnish

VARNISH_LISTEN_PORT=80

# service varnish start

###查看緩存命中狀況

sub vcl_deliver {

if (obj.hits > 0) {

set resp.http.X-Cache = "HIT from westos cache";

}

else {

set resp.http.X-Cache = "MISS from westos cache";

}

return (deliver);

}

# service varnish reload

 

###測試緩存命中

 

wKiom1jnNVTwrRRzAAFshs79ISY955.png-wh_50 

 

 

wKioL1jnNV-QJpeqAAF7oQonKIY595.png-wh_50 

 

 

 

 

###經過 varnishadm 手動清除緩存

# varnishadm ban.url .*$             #清除全部

# varnishadm ban.url /index.html    #清除 index.html 頁面緩存

# varnishadm ban.url /admin/$      #清除 admin 目錄緩存

 

###定義多個不一樣域名站點的後端服務器

backend web1 {

.host = "172.25.45.12";

.port = "80";

}

backend web2 {

.host = "172.25.45.13";

.port = "80";

}

 

#當訪問 www.westos.org 域名時從 web1 上取數據,訪問 bbs.westos.org 域名時到 web2 取數據,

訪問其餘頁面報錯。

sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {

set req.http.host = "www.westos.org";

set req.backend = web1;

return (pass);

} elsif (req.http.host ~ "^bbs.westos.org") {

set req.backend = web2;

} else {error 404 "westos cache";

}

}

# service varnish reload

 

###定義負載均衡

director lb round-robin {

{  .backend = web1; }

{  .backend = web2; }

}

#把多個後端聚合爲一個組,並檢測後端健康情況

 

 

sub vcl_recv {

if (req.http.host ~ "^(www.)?westos.org") {

set req.http.host = "www.westos.org";

set req.backend = lb;

return (pass);

#爲了測試方便,不進行緩存。

} elsif (req.http.host ~ "^bbs.westos.org") {

set req.backend = web2;

} else {

error 404 "westos cache";

}

}

# service varnish reload

 

###varnish cdn 推送平臺

http://code.google.com/p/varnish-php-bansys/

 

#須要安裝 php 支持

# unzip bansys.zip -d /var/www/html

# vi /var/www/html/bansys/config.php

#只保留以下設置,其他註釋掉

wKioL1jnNWyxLMoSAAGf_K4lbes430.png-wh_50 

 

#bansys 有兩種工做模式,分別是:telnet http 模式。

#telnet 模式須要關閉 varnish 服務管理端口的驗證,註釋掉/etc/sysconfig/varnish 文件中的「-S $

{VARNISH_SECRET_FILE}」這行,重啓 varnish 服務便可。

#若是是 http 模式須要對 varnish 作如下設置:

# vi /etc/varnish/default.vcl

acl westos {

#設置訪問控制

"127.0.0.1";

"172.25.45.0"/24;

}

sub vcl_recv {

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

if (!client.ip ~ westos) {

error 405 "Not allowed.";

}

ban("req.url ~ " + req.url);

error 200 "ban added";

}

}

# service varnish reload

wKiom1jnNXewtCHFAACB2fqRMqU562.png-wh_50

相關文章
相關標籤/搜索