Cdn
Cdn是一個代理緩存服務器。其實就是減少網絡中冗餘數據的重複傳輸。Cdn就是將網站內容發佈到最接近用戶的網絡“邊緣”,使用戶可以就近快速的取得自己想要的內容。在cdn整體部署的時候包括分佈式存儲,負載均衡,網絡重定向。
傳統的網絡訪問方式
Cdn加速
Server2 varnish 關閉防火牆,selinux時disabled狀態
Server3 apache
Server4 apache
[root@server2 ~]#yum localinstall -yvarnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm
[root@server2 ~]# vim/etc/varnish/default.vcl ###### 配置一個後端服務器
backend default {
.host = "172.25.137.3"; #########後端的server的ip
.port = "80";
}
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);
}
[root@server2 ~]# vim/etc/sysconfig/varnish ####配置varniash服務器監聽端口
VARNISH_LISTEN_PORT=80 ########66行,varnish監聽的端口
VARNISH_TTL=60 ########緩存的時間
[root@server2 ~]# /etc/init.d/varnish start
[root@server3 ~]# /etc/init.d/httpd start
[root@server3 html]# vim/var/www/html/index.html 給server3做一個測試頁
server3.example.com
瀏覽器測試頁,當訪問server2,其實時時訪問的後端的server3
[root@foundation137cdn]# curl -I 172.25.137.2 測試緩存
HTTP/1.1200 OK
Server:Apache/2.2.15 (Red Hat)
Last-Modified:Fri, 05 Aug 2016 10:20:17 GMT
ETag:"2087-14-5395069bc66f6"
Content-Type:text/html; charset=UTF-8
Content-Length:20
Accept-Ranges:bytes
Date:Fri, 05 Aug 2016 12:51:41 GMT
X-Varnish:565160603
Age:0
Via:1.1 varnish
Connection:keep-alive
X-Cache:MISS from westos cache
[root@server2varnish]# varnishadm ban.url .*$ 清空緩存
[root@server2varnish]# varnishadm ban.url /index.html 清空頁面緩存
定義多個不同域名站點的後端服務器
backend web1 {
.host = "172.25.137.3";
.port = "80";
}
backend web2 {
.host = "172.25.137.4";
.port = "80";
}
當訪問www.westos.org域名時從web1上取數據,訪問bbs.redhat.org域名時到web2上取數據,其他報錯
subvcl_recv {
if (req.http.host ~"^(www.)?westos.org") {
set req.http.host ="www.westos.org";
set req.backend = web1;
}elsif (req.http.host ~ "^bbs.redhat.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
[root@server2varnish]# /etc/init.d/varnish reload
物理界解析
[root@foundation137~]# vim /etc/hosts
[root@server2~]# vim /etc/varnish/default.vcl
directorIB round-robin{ #######把多個後端聚合爲一個組,並檢測後端健康狀態
{.backend = web1; }
{.backend = web2; }
}
subvcl_recv {
if (req.http.host ~"^(www.)?westos.org") {
set req.http.host ="www.westos.org";
set req.backend = IB; ####後端組
return (pass); ####爲了測試方便,不進行緩存
}elsif (req.http.host ~ "^bbs.redhat.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
[root@server2~]# /etc/init.d/varnish reload
[root@server4html]# vim /etc/httpd/conf/httpd.conf
[root@server4html]# /etc/init.d/httpd restart
[root@server2~]# varnishadm ban.url .*$ 清空緩存
#####varniashcdn推送平臺 (推送主要是清空緩存)
需要安裝php ,apache
[root@server2~]# yum install -y httpd -y
[root@server2~]# yum install php -y
[root@server2~]# yum install unzip
[root@server2~]# unzip bansys.zip -d /var/www/html/
[root@server2html]# cd bansys/
[root@server2bansys]# mv * ..
[root@server2html]# vim config.php 文件中的多於的可以註釋
對於羣組的定義值有定義了羣組了才能推送(推送是因爲當後端服務器內容更新後,cdn裏有健康檢查,會進行內容推送)
[root@server2html]# vim /etc/httpd/conf/httpd.conf 修改apache監聽的端口,因爲varnish監聽的端口是80,把apache監聽端口改爲8080
[root@server2html]# /etc/init.d/httpd start
aclwestos { ###########設置控制訪問
"127.0.0.1";
"172.25.0.0"/24;
}
backendweb1 {
.host = "172.25.137.3";
.port = "80";
}
backendweb2 {
.host = "172.25.137.4";
.port = "80";
}
directorIB round-robin{
{.backend = web1; }
{.backend = web2; }
}
subvcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HITfrom westos cache";
}
else {
set resp.http.X-Cache ="MISS from westos cache";
}
return(deliver);
}
subvcl_recv {
if (req.http.host ~"^(www.)?westos.org") {
set req.http.host ="www.westos.org";
set req.backend = IB;
return (pass);
}elsif (req.http.host ~ "^bbs.redhat.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Notallowed.";
}
ban("req.url ~ " +req.url);
error 200 "banadded";
}
}
[root@server2html]# /etc/init.d/varnish reload
Bansys有兩種工作模式,分別是:telnet和http
telnet模式需要關閉 varnish 服務管理端口的驗證,註釋掉/etc/sysconfig/varnish 文件中的“-S $
{VARNISH_SECRET_FILE}”這行,重啓 varnish 服務即可。此實驗中是用的http方式