varnish
varnish是一款高性能的开源http加速器,varnish与squid服务类似,都用来做缓存
配置varnish服务器
本篇博客中涉及的所有软件包下载可参考此博客:https://blog.youkuaiyun.com/qq657886445/article/details/83662696
server1 :
安装varnish软件包(需自行下载)
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
vim /etc/sysconfig/varnish
vim /etc/varnish/default.vcl ## 配置服务
#配置一个后端服务器
backend default {
.host = “172.25.254.2”;
.port = “80”;
}
查看varnish服务最多打开文件数
需使kernel限制 > system限制 > app限制
sysctl -a | grep file 查看内核最多打开文件数
由于varnish服务最多打开文件数大于内核限制,所以需要修改varnish最多打开文件数
ulimit -n ## 最多打开文件数
ulimit -l ## 最大锁定内存
编辑文件 /etc/security/limits.conf
重新加载服务配置及开启服务
/etc/init.d/varnish reload
/etc/init.d/varnish start
server2:
安装httpd服务,并在默认发布页面写入内容
yum install httpd -y
vim /var/www/html/index.html
<h1>www.westos.org-server2</h1>
/etc/init.d/httpd start
真机测试:
打开浏览器访问 varnish服务器ip
查看缓存命中情况
vim /etc/varnish/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);
}
/etc/init.d/varnish reload #加载策略
/etc/init.d/varnish start #开启服务
物理机测试:
curl -I 172.25.24.1
varnishadm ban.url /index.html ## 清除index.html页面缓存
varnishadm ban.url .*$ ## 清除所有缓存,慎用
配置多个后端服务器
server1:
vim /etc/varnish/default.vcl
添加
backend web1 {
.host = "172.25.254.2";
.port = "80";
}
backend web2 {
.host = "172.25.254.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";
}
}
/etc/init.d/varnish reload # 加载策略
server2 与 server3 配置httpd
真机测试:
添加本地域名解析
curl -I 域名
定义负载均衡
server1:
vim /etc/varnish/default.vcl
添加
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";
}
}
/etc/init.d/varnish reload
server3 配置一个apache虚拟主机
mkdir /www
vim /www/index.html
<h1>server3</h1>
vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 ##990行取消注释
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName bbs.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
/etc/init.d/httpd restart
真机测试:
curl www.westos.org
实现web1与web2轮询
varnish cdn 推送平台
server1:
#需要安装 php 及 httpd 支持
unzip bansys.zip
cd bansys
mv * /var/www/html
vim /etc/httpd/conf/httpd.conf
Listen 8080 # 因为varnish端口为80为了避免冲突修改apache端口为8080
vim /var/www/html/config.php
#修改为以下内容
<?php
$var_group1 = array(
'host' => array('172.25.254.1'),
'port' => '80',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
vim /etc/varnish/default.vcl
#添加以下语句
#设置访问控制
acl westos {
"127.0.0.1";
"172.25.254.0"/24;
}
#修改sub vcl_recv
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;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
/etc/init.d/varnish reload
/etc/init.d/httpd start
真机测试:
访问 server1 ip:8080 发送推送
推送模式:HTTP
CDN群组:www.westos.org
推送内容:/index.html #页面
访问www.westos.org /index.html ,然后推送一次/index.html页面,再去访问www.westos.org /index.html,再此推送/index.html页面,再去访问www.westos.org /index.html,会发现实现页面访问轮询