使用varnish实现网站动静分离

一、Varnish简介

Varnish是一款高性能、开源的反向代理服务器和缓存服务器,其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一。

Varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。

Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程。

二、Varnish工作流程

1)、varnish从客户端接收请求后,由vcl_recv状态引擎处理,不能识别的请求将会通过参数pipe交给vcl_pipe状态引擎,需要查找缓存的请求通过lookup参数将会交给vcl_hash状态引擎,无需缓存的数据通过参数pass将会交给 vcl_pass状态引擎;

2)、vcl_hash状态引擎在接收到请求后会从缓存中查找数据,查询结果有两种,一种是hit缓存命中,另一种是miss缓存未命中;

3)、vcl_hit状态引擎将命中的缓存数据通过参数deliver交给vcl_deliver状态引擎,vcl_deliver状态引擎将数据处理后,最终返回给客户端;

4)、vcl_miss状态引擎将未命中的结果参数fetch交给vcl_fetch状态引擎,vcl_fetch状态引擎将会从数据库中查找数据;

5)、vcl_fetch状态引擎将从数据库中查询到的结果,返回给vcl_deliver状态引擎;

6)、vcl_deliver状态引擎将结果返回给master进程,最终返回给客户端;

三、使用Varnish实现网站动静分离

实验环境,三台虚拟机

Linux:CentOS6.5

Varnish:varnish-3.0.4-1.el6.x86_64

Nginx:nginx-1.4.7

Varnish主机:两块网卡,外网IP 172.16.36.10,内网IP 192.168.0.10

Web服务器1:IP 192.168.0.20,用于作静态文件服务器

Web服务器2:IP 192.168.0.30,用于作动态程序服务器

前提说明:

varnish的配置文件为vcl后缀,位于/etc/varnish/目录,缓存通常用于提升响应速度,一般而言,可以缓存html静态页面、图片、js脚本、css样式表,因为动态脚本语言编写的页面需要使用脚本引擎处理,因此没有缓存的必要性;nginx本身就有缓存及反向代理功能,完全可以实现web服务的动静分离,不过以缓存功能作对比,varnish的缓存显然比nginx更专业,所以要作缓存服务器,可以试试varnish,本次操作将以实验性的目的,使用varnish实现web服务动静分离;

1、安装Varnish

# rpm -ivh varnish-3.0.4-1.el6.x86_64.rpm varnish-docs-3.0.4-1.el6.x86_64.rpm varnish-libs-3.0.4-1.el6.x86_64.rpm

2、配置varnish

1)、编辑varnish脚本的配置文件/etc/sysconfig/varnish,将varnish监听的端口修改为80;

2)、新建文件/etc/varnish/web.vcl,编辑varnish缓存规则;

#定义后端服务器
backend web1 {
   .host="192.168.0.20";
   .port="80";
}
backend web2 {
   .host="192.168.0.30";
   .port="80";
}
#只允许本机使用purgers请求方法清除缓存
acl purgers {
   "127.0.0.1";
   "172.16.0.0"/16;
}
sub vcl_recv {
  if(req.request=="PURGE"){
      if(!client.ip~purgers) {
         error 405 "Mothod not allow";
      }
   }
#静态资源交给web1服务器
   if(req.url ~ "\.(html|htm|shtml|css|js|jpg|png|gif|jpeg)"){
      set req.backend=web1;
   }
#php页面交给web2服务器,并跳过缓存
   if(req.url ~ "\.php") {
      set req.backend=web2;
      return(pass);
   }
   return(lookup);
}
#将命中的缓存清除
sub vcl_hit {
  if (req.request == "PURGE") {
    purge;
    error 200 "Purged OK";
  }
}
#如果请求清除的资源不在缓存列表中,返回404状态
sub vcl_miss {
  if (req.request == "PURGE") {
    purge;
    error 404 "Not in cache";
  }
}
#如果请求清除的资源是一个不可缓存的资源,返回502状态
sub vcl_pass {
  if (req.request == "PURGE") {
    error 502 "Purged on a passed object.";
  }
}
#缓存对象存活时间
sub vcl_fetch {
   if(req.url ~ "\.(html|htm|shtml|css|js|jpg|png|gif|jpeg)"){
      set beresp.ttl=7200s;
   }
}
#将结果返回给客户端并在响应头部添加两字段,显示命中与否,并显示后端响应的web服务器
sub vcl_deliver {
   if(obj.hits > 0) {
      set resp.http.X-Cache="HIT from" + " " + server.ip;
   }else{
      set resp.http.X-Cache="MISS";
   }
   set resp.http.Backend-IP=req.backend;
}

3)、将配置加载至varnish;

3.1)、连接varnish;

3.2)、加载配置;

3.3)、使用配置;

4)、配置两台web服务器,分别安装nginx与php;

192.168.0.20服务器,新建两页面,index.html与index.php,两页面请求输出结果如下:

192.168.0.30服务器,新建两页面,index.html与index.php,两页面请求输出结果如下:

5)、测试结果,打开地址:172.16.36.10;

当我们请求html页面时,无论我们怎么刷新请求,缓存总是命中,并显示HIT,并且后端服务器一直是,web1(192.168.0.20);

当我们请求php页面时,我们不让他缓存,那么缓存也就永远不会命中,显示MISS,并且后端服务器一直是,web2(192.168.0.30);

6)、清除缓存;

整个配置完成,varnish实现了动静分离;

使用varnish实现网站动静分离,布布扣,bubuko.com

时间: 2024-11-03 22:05:07

使用varnish实现网站动静分离的相关文章

varnish缓存实现动静分离

 一.简介 Web缓存是指一个Web资源(html,js,css,images...)存在与Web服务器和客户端(浏览器),缓存会根据进来的请求报文做出响应,后缓存一份到本地的缓存中:当下一个请求到来的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用从缓存中响应访问请求还是向后端服务器再次发送请求,取决于缓存是否过期及其请求的内容是否发生改变.在前面所学的memcached中有过缓存的概念,但此内存缓存存在很大的弊端,被当今互联网企业所淘汰,varnish具有高速缓存的功能,得到了很多

大型网站动静分离

360云加速和360网站卫士有什么区别? 实际上说到这个话题,我更想问句:360云加速和360网站卫士有什么相同?嗯……相同点可能在于:1.都是反向代理 2.都是360的. 可是!这是360两个不同部门的完全不同的产品! 360云加速(专业CDN产品)按实际使用收费(按照流量收费或者带宽收费)节点线路遍布大小运营商:电信.联通.移动.长宽.教育网……几十个优秀节点.全节点SSD部署可以自定义缓存规则.不限制缓存文件类型和大小(再大都可以完美缓存)文件采用内存+SSD+硬盘存储(硬盘存储缓存.保障

LAMP架构实现网站动静分离及流行博客论坛安装实验

动静分离能有效提升站点访问效率,此时apache工作在反向代理模式.PHP不在作为apache的模块.而是以独立服务器的方式运行.两者之间通过fcgi机制建立通讯. 一.安装DNS服务实现域名解析 1.安装bind [[email protected] ~]# yum install bind 2.配置named主配置文件 [[email protected] ~]# vim /etc/named.conf // // named.conf // // Provided by Red Hat b

varnish的动静分离

一.Varnish简介 Varnish是一款高性能.开源的反向代理服务器和缓存服务器,其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一. Varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程). Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Chil

K8S集群使用Ingress实现网站入口动静分离实践

今年3月份在公司的内部k8s培训会上,和研发同事详细探讨了应用部署容器化部署的几个问题,问题简要如下: 1.java应用容器化部署首先通过自动化部署工具编译出全量的war包,将war包直接编译到docker镜像后推送到私用仓库并版本化控制:其次通过更新deployment的yaml文件来实现部署和后续的滚动更新,应用程序需要进行容器化改造. 这里的难点和工作量在于容器的镜像制作以及版本化管理,之后准备采用harbor做企业私有仓库. 2.dashborad面板的权限控制解决方案参考:http:/

LAMP+haproxy+varnish实现网站访问的动静分离及静态资源缓存

实验目标:1.    LAMP节点提供用户动态请求访问,数据库单独有数据库节点提供:2.    LAMP动态网站有两台服务器,提供负载均衡:3.    静态网站服务器节点提供用户的静态资源请求访问:存在两台静态web服务器,其网站静态资源在静态服务器上存放:4.    用户的静态请求访问后缓存在varnish服务器上,实现访问加速5.    前端的haproxy提供反向代理功能,将用户的动态资源请求发送给后端LAMP节点,静态资源请求发往后端静态web服务器:6.    该架构考虑还不健全,如静

Varnish基础配置实现动静分离web站点

由于一个web站点的程序的访问具有局部性特征:时间上的局部性:一个数据被访问过之后,可能很快会被再次访问到:空间局部性:一个数据被访问时,其周边的数据也有可能被访问到;varnish可将这部分数据缓存下来.缓存的数据存在被访问较频繁的数据可以称其为热区:缓存同样存在局部性:时效性:如果缓存空间耗尽:则采用LRU,最近最少使用算法:将过期的缓存清理掉 varnish的基本工作原理: Varnish通过类似于HTPP反向代理的方式将可以用来缓存的数据缓存下来直接响应给客户端的缓存数据,如果缓存中没有

关于大型网站技术演进的思考(十一)--网站静态化处理—动静分离策略(3)

前文里我讲到了网站静态化的关键点是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路.由此可见,网站静态化处理的核心就是动静分离和缓存两大方面,上篇我简单讲述了动静整合的基础知识,本篇将会讲述两大核心之一的动静分离策略,只有把动静分离策略做好了,缓存才能发挥出它应有的效果. 下面我们要讨论下动静分离的策略了,一个页面什么内容是动态的,什么内容是静态的,这个我们

【转】关于大型网站技术演进的思考(十一)--网站静态化处理—动静分离策略(3)

前文里我讲到了网站静态化的关键点是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路.由此可见,网站静态化处理的核心就是动静分离和缓存两大方面,上篇我简单讲述了动静整合的基础知识,本篇将会讲述两大核心之一的动静分离策略,只有把动静分离策略做好了,缓存才能发挥出它应有的效果. 下面我们要讨论下动静分离的策略了,一个页面什么内容是动态的,什么内容是静态的,这个我们