安装varish作为缓存和代理

晨曦之光 发布于 2012/03/09 14:51
阅读 285
收藏 1
1,Varish的使用有两种模式:
第1种  Nginx(负载)+varish(缓存)+WEB
第2种  Varish(缓存和负载)+web
 
2,varish是以内存作为共享容器的:
内存的大小决定了它的缓存容量。相对于主要以硬盘为存储的squid来说要高效的多。它适合一些经常查询且变化不大的静态内容缓存。
    
     Nginx  图片和静态文本给 varish 后端是WEB的8080端口
            动态内容给后端WEB  后端是WEB的8080端口
     这个架构要看服务器和存储内容,如果nginx不用做反向代理以支持后台诸多应用的话,那么单就nginx来说,利用proxy_cache模块也可以支持本地缓存。它缓存在硬盘上,性能和squid相差不大,但是稳定性和易用性要好的多。
 
3,安装varish:
    1)创建用户和组,赋予权限groupadd www
useradd -g www www
mkdir -p /car/vcache
chown -R www:www /var/vcache
   
 2)创建varnish日志目录并授权mkdir -p /var/log/varnish
chmod +w /var/log/varnish
chown -R www:www /var/log/varnish
   
 3)编译安装varnish
tar zxvf varnish-1.1.2.tar.gz
cd varnish-1.1.2
./configure --prefix=/usr/local/varnish
make && make install
   
 4)创建并修改配置文件vi /usr/local/varnish/vcl/conf
 
backend default {                           #通过反向代理请求后端IP为192.168.0.5,80端口的WEB服务器,可以是本机,也可以是后台                  .host = "192.168.0.151";
                  .port = "81";
}
 
acl purge {                                      #允许这三个来源的IP通过PURGE方法清除缓存       "localhost";
       "127.0.0.1";
       "192.168.1.0"/24;
}
 
sub vcl_recv {
       if (req.request == "PURGE") {
               if (!client.ip ~ purge) {
                       error 405 "Not allowed.";    #405错误显示               }
              return(lookup);
       }
 
       if (req.http.host ~ "^blog.s135.com") {
               set req.backend = default;
               if (req.request != "GET" && req.request != "HEAD") {
                return(pipe);
               }
               else {
                return (lookup);
               }
       }
       else {
               error 404 "Not in cache"; #404错误显示               return(lookup);
       }
}
 
sub vcl_hit {
       if (req.request == "PURGE") {
               set obj.ttl = 0s;
               error 200 "Purged.";
       }
}
 
sub vcl_miss {
       if (req.request == "PURGE") {
               error 404 "Not in cache.";
       }
}
 
sub vcl_fetch {                                            
       if (req.request == "GET" && req.url ~ "/.(txt|js)$") {
              set obj.ttl = 3600s;                         #对于txt和js缓存一个小时       }
       else {
               set obj.ttl = 30d;                     #其余的缓存一天       }
}
Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
   5)启动ulimit -SHn 51200 
/usr/local/varnish/sbin/varnishd -a :80 -b 192.168.0.151:81 -p thread_pool_max=1500 -p thread_pools=5 -p listen_depth=512  -w 1,10000,120
6)将访问日志写入访问文件/usr/local/varnish/bin/varnishncsa -n /var/vcache -w /var/log/varnish/varnish.log &
 
7)查看状态
8)测试
我们用varish监听80端口,同时将数据来源转向到监听81端口的Apache
访问主页

原文链接:http://blog.csdn.net/21aspnet/article/details/6570760
加载中
返回顶部
顶部