首页 > 代码库 > varnish应用

varnish应用

varnish简介

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


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

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


实验地图:

wKioL1QkNtjybLyeAACaYaOqObI992.jpg


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             应用配置 

wKiom1QkPISRa4zDAAB5h7vccyk835.jpg

wKioL1QkPKiCgDfHAAB5XYZtS7M554.jpg



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

wKiom1QkQSmSM80fAABASllLpxc625.jpg

wKiom1QkQW6AQucdAAJp154PzJU200.jpg


wKiom1QkQengEKB5AABASllLpxc455.jpg

wKiom1QkQgCRDz8AAAJvprp7Xi8847.jpg








本文出自 “Linux” 博客,转载请与作者联系!

varnish应用