cdn加速之varnish反向代理缓存加速服务器

本文介绍Varnish作为一款高性能网站加速器的工作原理及其配置方法,包括如何设置反向代理、负载均衡及缓存策略等关键内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

varnish

它是一款先进的网站加速器,他的任务是代理并缓存他后面 web 服务器的内容,加速访问您的 web 站点。与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点

cdn加速实现

处理过程大致分为如下几个步骤:
这里写图片描述
vcl_hit : 命中
vcl_miss :未命中
Receive状态,也就是请求处理的入口状态,根据VCL规则判断该请求应该是Pass或 Pipe(判断是否是可缓存数据),或者进入Lookup(本地查询)。 (也可以自定义区分客户端是否支持处理压缩数据而判断区分缓存)
Lookup状态,进入此状态后,通过hash机制处理,默认url做key;,若找到,则进入Hit状态,否则进 入miss状态。
Pass状态,在此状态下,会进入后端请求,即进入fetch状态。
Fetch状态,在Fetch状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地 的存储。
Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。1.hit直接deliver; 2.fetch直接deliver
Pipe状态:不可缓存数据,直接管道后端处理


主机环境:
rhel6 selinux and iptables disabled
server1 varnish
server2 apache
server3 apache

Server1 安装varnish
yum install varnish-3.0.5-1.el6.x86_64.rpm
yum install varnish-libs-3.0.5-1.el6.x86_64.rpm

Server2、3 安装httpd
yum install httpd -y
添加显示内容到httpd
vim index.html
<h1> server2</h1>
修改端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80 ##设定varnish的端口为80

这里写图片描述
VARNISH_VCL_CONF=/etc/varnish/default.vcl # 定义vcl配置文件
# VARNISH_LISTEN_ADDRESS= # 定义varnish服务监听地址
VARNISH_LISTEN_PORT=80 # 定义varnish服务监听端口
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 # 定义允许进行进程管理地址
VARNISH_ADMIN_LISTEN_PORT=6082 # 定义管理进程监听端口
VARNISH_SECRET_FILE=/etc/varnish/secret # 定义密码文件
VARNISH_MIN_THREADS=50 # 定义varnish启动时最小线程数
VARNISH_MAX_THREADS=1000 # 定义varnish启动时最大线程数
VARNISH_THREAD_TIMEOUT=120 # 定义varnish线程响应超时时间

反向代理配置

现在,这块配置定义了一个 varnish 默认访问的后端服务器,当 varnish 需要从后端服务器获取内容的时候,它就会访问自己(127.0.0.1)的 80 端口。
Varnish 可以定义多个后端服务器而且您可以通过定义多个后端服务器达到负载均衡的目的。
vi /etc/varnish/default.vcl

backend web1 {
.host = “172.25.0.1”; ##指定apache所在主机ip
.port = “80”; ##apache端口
}

开启varnish
/etc/init.d/varnish start
vim /etc/varnish/default.vcl ##查看缓存命中信息
检查端口
netstat -antlp
这里写图片描述
注:错误503,差不多500左右都是服务器出了问题,200是正常的
然后再default写入指令
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);         }

重新装载varnish
* service varnish reload*
这里写图片描述

发现来源改变,缓存成功

varnish虚拟主机和轮寻

通过 varnishadm 手动清除缓存

varnishadm ban.url .*$ #清除所有
varnishadm ban.url /index.html #清除index.html页面缓存 varnishadm ban.url /admin/$ #清除admin目录缓存

定义负载均衡

定义多个不同域名站点的后端服务器

为了测试,先在apache所在主机写好
server2-web1
server3-web2
< h1> www.westos.org-server2< /h1>
< h1> www.westos.org-server3< /h1>

在varnish配置文件上写上
vim /etc/varnish/default.vcl
backend web1 {
.host = “172.25.0.2”;
.port = “80”;
}
backend web2 {
.host = “172.25.0.3”;
.port = “80”;
}
director mysite 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 = mysite;
return (pass);
} elsif (req.http.host ~ “^bbs.westos.org”) {
set req.backend = web2;
} else { error 404 “westos cache”;
}
}
注:如果不加return (pass);那么会缓存每次都要
手动清除:varnishadm ban.url .*$
从而无法直观的达成实验目的

做完上面的然后重启: service varnish reload
这里写图片描述
这里写图片描述
就可以直接轮询了,使后端服务器大大降低负载,如果其中一个apache挂掉,varnish会自动将挂掉的服务器剔除出轮询队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值