varnish应用

varnish简介

arnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来。

varnish缓存方式:(也可以缓存到内存和磁盘) 
    缓存数据的存储方式:在缓存空间中固定分配大小的空间,如果要缓存一个数据根据缓存数据的大小来缓存到最接近缓存数据大小的空间。  如果缓存空间慢了将使用用LRU机制来置换内存空间(LRU是Least Recently Used 近期最少使用算法。内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,Oracle会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。)

varnish释放缓存方式:由varinish管理缓存超时周期线程TTL(TTL值如果超过设置的值将释放缓存空间),如果释放的空闲空间有连续的,就会自动合并成一起成为大的空闲空间,避免了空间浪费和空间碎片(内存合并机制)。

实验地图:

1 web1,                                                           web2配置

# yum install httpd                                      # yum install httpd 
    # service httpd start                                     # service httpd start

# vim /var/www/html/index.html                   # vim /var/www/html/index.html

hello 1                                                                     hello 2

varnish:

# yum install varnish

配置:

# cp /etc/varnish/default.vcl /etc/varnish/one.vcl       //先备份

# vim /etc/varnish/test1.vcl

backend web1 {                         
  .host = "192.168.0.108";                    后端服务器的地址 
  .port = "80";                            监听端口 
  .probe = {                           监控检测机制 
    .url = "/index.html";                以url来检测 
    .interval = 2s;                        每隔2秒钟检测一次 
    .window = 8;                        从正常到失败检测8次 
    .threshold = 2;                        8此中有两次是监控就说明是监控的 
   } 

backend web2 {                            //同上 
  .host = "192.168.0.109"; 
  .port = "80"; 
  .probe = { 
    .url = "/index.html"; 
    .interval = 2s; 
    .window = 8; 
    .threshold = 2; 
   } 

director webservers round-robin {            //定义后端服务器组webservers,并指明访问机制:这里指定的是                                                                          round-robin轮询机制 
    { .backend = web1; }                               指定后端server 
    { .backend = web2; } 

acl purgers {                           //定义清除单个缓存的控制列表(允许的用户) 
    "127.0.0.1"; 
    "192.168.0.0"/24;                   
}

sub vcl_recv {                                                 //指定接收客户端的一些访问机制 
    set req.backend = webservers;               // 应用后端server

if (req.restarts == 0) {                               // 如果请求重启次数为0 
        if (req.http.x-forwarded-for) {                //如果存在x-forwarded-for 
            set req.http.X-Forwarded-For = 
            req.http.X-Forwarded-For + ", " + client.ip;   //则在x-forwarded-for后面添加客户端IP 
        } else { 
            set req.http.X-Forwarded-For = client.ip;      //否则设置x-forwarded-for等于客户端IP 
        } 
     } 
     if (req.url ~ "^/test1.html$") {                     //如果是请求test1.html则跳过直接去后端server请求 
                return(pass); 
     }

if (req.request == "PURGE"){                     //定义清除单个缓存的返回信息的说明 
       if (client.ip !~ purgers) { 
            error 405 "Method not allower."; 
        } 
        return (lookup);                   //如果客户请求为 PURGE且客户端IP非purgers 则响应Method not allower. 
    } 
     return (lookup);              // 如果客户端请求为PURGE则直接查找缓存 
}

sub vcl_hit {                             //如果在缓存中能查到,直接清除缓存并响应"Purged 
    if (req.request == "PURGE") { 
        purge; 
        error 200 "Purged";    
    } 
     return (deliver); 

sub vcl_miss {                                //如果缓存中没有查到,则直接返回not in Purged 
    if (req.request == "PURGE") { 
        purge; 
        error 404 "not in Purged";    
    } 
     return (fetch); 
}

sub vcl_fetch {                            //这里定义得不严谨(为了方便测试,周期性缓存时间最多5秒) 
  set beresp.ttl = 5s; 
}

sub vcl_deliver {                                  // 设置响应客户端机制 
    if (obj.hits > 0) { 
           set resp.http.X-Cache = "HIT via" + " " + server.hostname;   //如果缓存命中次数大于0 则在响应首部                                                                                                                    添加varnish服务器的主机名称, 
        } else { 
                set resp.http.X-Cache = "MISS via" + " " + server.hostname; //如果没有命中缓存,则在响应首部                                                                                                                           添加X-Cache = "MISS via" + " " +                                                                                                                              server.hostname


     return (deliver);                                                                    
}

启动varnish服务: 
        1、 service varnish start 
        2、 # varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
             vcl.load ning one.vcl   编辑生效配置 
             vcl.use ning             应用配置

检测是否在响应头添加了指定信息

时间: 2024-12-16 19:43:23

varnish应用的相关文章

Apache+varnish(高性能开源HTTP加速器)搭建负载均衡集群

实验环境:RHEL6.5 实验环境4台 真机进行访问测试     willis.example.com         172.25.254.6 虚拟机1(缓存端)   varnish.example.com       172.25.254.8 虚拟机2(服务器端1) web1.example.com     172.25.254.10 虚拟机3(服务器端2) web2.example.com     172.25.254.20 两台服务器主要用于负载均衡实验. 实验内容:1.服务器端安装Ap

varnish 4.0强制gzip压缩

如果源服务器没有开启gzip, 那么无论客户端是否支持,默认情况下得到的结果总是不压缩的. 源服务器未启用gzip的情况,强制将取到的内容gzip压缩后存入缓存,然后客户端就可以得到gzip压缩结果,配置代码片段: sub vcl_backend_response { if (beresp.http.content-type ~ "(text|javascript|txt)" ) { set beresp.do_gzip = true; } varnish 4.0默认是接收压缩内容的,

Haproxy + Varnish 实现WEB静态页面缓存

一.缓存介绍及Haproxy+Varnish架构图: 1.)简介:现阶段的互联网时代,缓存成为一个必不可少的一环,不论是对于整体架构的优化,减少服务器的压力,加速用户访问速度,都是需要用到缓存.而缓存的种类也是很多,例如CDN,Squid,Memcached,Varnish,已经成为一个中型,大型架构中基本的实现. 2.)CDN缓存技术是根据全国各地的用户,直接缓存到离用户最近的地方. 3.)Squid是处于前端的缓存,并且可以用作为正向代理,反向代理,透明代理. 4.)Memcached主要用

varnish简单学习

操作系统:redhat5.5 前端服务器:varnish cache 2.1.5 监听端口8080 后端服务器:tengine 1.4.6 监听端口80 接着,建立varnish用户以及用户组,并且创建Varnish缓存目录和日志目录:[[email protected] ~]#useradd  -s /sbin/nologin varnish[[email protected] ~]#mkdir /data/varnish/cache[[email protected] ~]#mkdir /d

记一次varnish异常/故障

公司一varnish集群运行很久了,一直很稳定,没发现什么问题.最近开发那边反馈新传的静态文件访问不了.出现以下错误: Error 503 Service Unavailable Guru Meditation: XID: 1267841165 cache server 5443 检查varnish启动配置, ps -ef | grep varnish usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default

varnish

varnish1.缓存相关的HTTP首部 HTTP协议提供了多个首部用以实现页面缓存及缓存失效的相关功能,这其中最常用的有:(1)Expires:用于指定某web对象的过期日期/时间,通常为GMT格式:一般不应该将此设定的未来过长的时间,一年的长度对大多场景来说足矣:其常用于为纯静态内容如JavaScripts样式表或图片指定缓存周期:(2)Cache-Control:用于定义所有的缓存机制都必须遵循的缓存指示,这些指示是一些特定的指令,包括public.private.no-cache(表示可

varnish安装及配置详解

varnish系统架构: varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程). Management进程主要实现应用新的配置.编译VCL.监控varnish.初始化varnish以及提供一个命令行接口等.Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程. Child进程包含多种类型的线程,常见的如:Acceptor线程:接收新的连接

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

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

varnish解读

缓存相关的基础 根据数据是否可以缓存 私有数据:一般为用户的私有数据,不能缓存 共有数据:这类数据为共有数据,大部分都可缓存 缓存有效性判断机制 过期时间 HTTP/1.0 Expires:过期时间 HTTP/1.1 Cache-Control:max-age= Cache-Control: s-maxage= 条件式请求 Last-Modified/If-Modified-Since Etag/If-None-Match 缓存层级: 私有缓存:用户代理的本地缓存机制,一般为浏览器自己的缓存 公

Varnish部署

上缓存服务器的目的: 1.减少clint对后端服务器的访问压力. 2.在静态资源较多的情况下,服务端可以快速对clint的访问做出相应. 缓存服务器目前比较有名气,市面上缓存代理服务器使用比较多的Varnish/squid. squid的主要是缓存大文件. Varnish主要缓存静态资源,如图片. Varnish版本的区别: 新版本Varnish4,client/backend分离,新的vanishlog查询语言,安全方面据说有提升. 首先是必须定义版本号: vcl 4.0.VMOD's更独立化