一.用varnish实现cdn加速概念
CDN的全称是Content Delivery Network,即内容奋发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。
二.用varnish实现cdn加速过程
1.准备环境
参考上一篇linux运维企业篇——环境配置 虚拟机封装
建立3个子虚拟机
在真机中用ssh命令连接三个虚拟机
server1中:
检查server1中的selinux和防火墙状态是否关闭
2.安装varnish服务
下载好安装包并安装
varnish-3.0.5-1.el6.x86_64.rpm
varnish-libs-3.0.5-1.el6.x86_64.rpm
yum install -y varnish-*
查看varnish的配置文件
vim /etc/sysconfig/varnish
图中显示了程序运行的限制信息
NFILES=131072
MEMLOCK=82000 # 锁定共享内存大小
NPROCS=‘’unlimited‘’ #最大线程数为不限制
3.查看内核允许打开文件的最大数
查看系统能打开的文件数和上图相差甚远,增大内存可以增加打开文件最大数
重新连接vm1快照并查看可打开的最大文件数
4.查看server1锁定共享内存大小
锁定共享内存大小为64,和varnish文件中的相差甚远
5.修改varnish监听端口为80
66行
6.更改主机安全限制
cd /etc/security/
vim limits.conf
在文件最后加上
varnish - nofile 131072
varnish - memlock 82000
varnish - nproc unlimited
7.设置varnish 默认文件
修改varnish监听的网络服务器的ip
cd /etc/varnish/
vim default.vcl
更改反向代理 .host=“172.25.6.2”
开启varnish服务
/etc/init.d/varnish start
ps aux # 查看进程,找出varnish的两个进程,一个是root还有一个是varnish
ps -ax | grep varnish ##也可以查看varnish开启的进程
一个root进程 监听子进程当子进程产生错误关闭时 root进程再fork一个
cat /proc/1027/status ##查看进程信息
netstat -tnlp #查看端口是否打开(80端口)
补充:安装varnish后会自动建立一个varnish用户
8.在server2中
下载httpd
设置主页
开启httpd服务
测试:
9.在server1中
编辑varnish的默认文件
backend default {
.host = "172.25.6.2";
.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);
}
重新加载varnish配置
/etc/init.d/varnish reload
10.在真机中测试
curl -I 172.25.6.1 #Age表示第一次访问的时间开始以秒计数,默认是120秒刷新一次缓存
手动清除缓存:
varnishadm ban.url .*$ #手动清除全部缓存
可以看出缓存是MISS
访问index.html文件
curl -I 172.25.6.1/index.html
varnishadm ban.url /index.html #手动清除index.html的缓存
可以看出缓存是MISS
11.多个web服务器 配置网络服务 群组
在server3中下载安装httpd
设置server3的默认界面
开启httpd服务
在server1中配置varnish默认文件
backend web1 {
.host = "172.25.6.2";
.port = "80";
}
backend web2 {
.host = "172.25.6.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
重新加载varnish配置
/etc/init.d/varnish reload
在真机中添加本地解析
vim /etc/hosts
172.25.6.1 server1 www.westos.org bbs.westos.org
在真机中测试:
curl -I www.westos.org
curl -I bbs.westos.org
12.负载均衡设置轮循
在seerver1中设置varnish默认文件
vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.6.2";
.port = "80";
}
backend web2 {
.host = "172.25.6.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; ##使用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
在server3中设定虚拟主机 使bbs.westos.org访问另一个页面
vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
建立两个目录/www和/bbs
分别设置两个index.html界面
重启httpd服务
/etc/init.d/httpd restart
在真机中测试:
curl www.westos.org
curl bbs.westos.org
三.使用bansys.zip进行批量推送清除缓存
在server1中安装 httpd,php,unzip
yum install httpd -y
下载bansys.zip并移动到/var/www/html/解压
将解压后bansys里的文件移动到/var/www/html中
编辑config.php文件
vim config.php
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.6.1'),
'port' => '8080',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
将http的端口改为8080 (因为varnish已占用80端口)
vim /etc/httpd/conf/httpd.conf
重启httpd服务
查看端口
在真机浏览器中
回到server1:
编辑varnish的default.vcl文件
vim /etc/varnish/default.vcl
acl westos {
"127.0.0.1";
"172.25.6.0"/24; ##设置允许哪些用户修改
}
backend web1 {
.host = "172.25.6.2";
.port = "80";
}
backend web2 {
.host = "172.25.6.3";
.port = "80";
}
sub vcl_recv {
if (req.request == “BAN”) {
if (!client.ip ~ westos) {
error 405 “Not allowed.”;
}
ban("req.url ~ " + req.url);
error 200 “ban added”;
}
}
注释41行
重新加载varnish配置
在真机中测试: