一、簡介
CDN的全稱是Content Delivery Network,其基本思路是儘可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定.
二、用varnish實現cdn
Web Cache更是節約服務器資源的關鍵。而最近幾年由FreeBSD創始人之一Kamp開發的varnish更是一個不可多得的Web Cache Server。嚴格意義上說,Varnish是一個高性能的反向代理軟件,只不過與其出色的緩存功能相比,企業更願意使用其搭建緩存服務器。
服務器(3個):172.25.4.1 172.25.4.2 172.25.4.3
1.安裝包
varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
2.安裝
yum install varnish * -y
3.修改varnish監聽的端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
4.修改/etc/varnish/default.vcl
backend web1 { ##配置後端服務器
.host = "172.25.4.2";
.port = "80";
}
backend web2 {
.host = "172.25.4.3";
.port = "80";
}
5.開啓varnish
/etc/init.d/varnish start
實驗一:測試緩存命中情況:
在default.vcl裏面添加
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);
}
重啓varnish
/etc/init.d/varnish reload
測試:
在客戶端添加解析:
vim /etc/hosts
172.25.4.1 www.westos.org westos.org bbs.westos.org
用varnishadm清一下緩存,下次訪問就不會從緩存中讀取
### 通過 varnishadm 手動清除緩存
varnishadm ban.url .*$
#清除所有
varnishadm ban.url /index.html
#清除 index.html 頁面緩存
varnishadm ban.url /admin/$
#清除 admin 目錄緩存
實驗二:負載均衡
如果找不到就到web1,或web2上找,web1、web2是apache
vim /etc/varnish/default.vcl
backend web1 { ##配置後端服務器
.host = "172.25.4.2";
.port = "80";
}
backend web2 {
.host = "172.25.4.3";
.port = "80";
}
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";
}
}
重啓varnish
/etc/init.d/varnish reload
在客戶端測試要做的:
修改客戶端的/etc/hosts
用瀏覽器訪問:如果不出錯的話,一隻刷新頁面會發現一會是web1的發佈頁,一會兒是web2的發佈頁
實驗三:cdn管理系統
varnish幫我們緩存很多的web資源,但是當後臺的數據有了變化需要更新怎麼辦,此時就需要用到CDN的推送管理了
1.安裝apache,PHP,設置apache在8080端口,並且啓動服務
yum install httpd php -y
/etc/init.d/httpd start
2.將bansys.zip解包,包裏面的內容統統放到apache的發佈目錄下
unzip bansys.zip -d /var/www/html
3.修改發佈目錄下的config.php
vim /var/www/html/bansys/config.php #只保留如下設置,其餘註釋掉
<?php
//varnish主機列表
//可定義多個主機列表
$var_group1 = array(
'host' => array('172.25.4.1'),
'port' => '80',
);
//varnish羣組定義
//對主機列表進行綁定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
'bbs.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一樣
$VAR_VERSION = "3";
?>
在http模式對varnish進行如下設置:
vim /etc/varnish/default.vcl
acl westos {
"127.0.0.1";
"172.25.4.0"/24;
}
backend web1 {
.host = "172.25.4.2";
.port = "80";
}
backend web2 {
.host = "172.25.4.3";
.port = "80";
}
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
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";
}
}
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);
}