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
###測試緩存命中
###經過 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
#只保留以下設置,其他註釋掉
#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