Varnish的安装与配置

一、Varnish的安装与配置

1、Varnish安装(rpm包软件)


<span style="font-size:18px;">rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-3.0.el5.rpm
yum install varnish  varnish-libs-devel -y</span>



接口

如有安装疑惑请访问varnish官网https://www.varnish-cache.org/installation/redha

2、Varnish目录结构

/etc/sysconfig/varnish    #存放Varnish运行参数设置
/etc/varnish/             #存放Varnish VCL配置文件

3、Varnish配置基本实例

3.1、修改 /etc/sysconfig/varnish

vim /etc/sysconfig/varnish
#VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_VCL_CONF=/etc/varnish/test.vcl           #调用test.vcl文件
VARNISH_LISTEN_PORT=80                           #改为80端口
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1           #监听地址
VARNISH_ADMIN_LISTEN_PORT=6082                   #管理端口
VARNISH_SECRET_FILE=/etc/varnish/secret          #密钥文件

3.2、提供/etc/varnish/test.vcl


cd /etc/varnish/
cp default.vcl test.vcl    #复制默认配置文件
3.3、配置/etc/varnish/test.vcl


############定义健康状态检测###############
probe healthcheck {
    .url = "/";               #定义健康检查的页面
    .interval = 6s;           #探测请求的发送周期,默认为5秒;
    .timeout = 0.3 s;        #每次探测请求的过期时长
    .window = 8;          #设定在判定后端主机健康状态时基于最近多少次的探测进行
    .threshold = 3;           #在.window中指定的次数中,至少有多少次是成功的才判定后端主机正健康运行
    .initial = 3;         #Varnish启动时对后端主机至少需要多少次的成功探测,默认同.threshold;
}
############定义两组服务器##############
backend web1 {
    .host = "172.16.10.7";    #服务器主机
    .port = "80";         #服务器端口
    .probe = healthcheck; #健康状态检测
}
backend web2 {
    .host = "172.16.10.3";
    .port = "80";
    .probe = healthcheck;
}
backend app1 {
    .host = "172.16.10.7";
    .port = "8080";
    .probe = healthcheck;
}
backend app2 {
    .host = "172.16.10.3";
    .port = "8080";
    .probe = healthcheck;
}
############定义集群,调用服务器##############
director webserver  random {     #定义一个名为webserver的directory,由web1,和web2分但请求,使用random算法,处理静态请求
    {.backend = web1;.weight  = 2;} #设置权重为2
    {.backend = web2;.weight = 5;}
}
director appserver  random {     #定义一个名为appserver的directory,由app1,和app2分但请求,使用random算法,处理动态请求
    {.backend = app1;.weight = 2;}
    {.backend = app2;.weight = 5;}
}
############定义Acl##############
acl purgers { #设置清理缓存的IP
    "127.0.0.1";
    "172.16.10.0"/16;
}
############vcl_recv函数段##############
sub vcl_recv {
 
    #使得后端服务能记录访问者的真实IP
    if (req.http.x-forwarded-for) {                            #添加首部信息
        set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }
 
    #配置动静分离
    if (req.url ~ "\.php$"){
        set req.backend = appserver;                         #php结尾的交给appserver服务器组处理,否则交给webserver服务器组处理
    }else{
        set req.backend = webserver;
    }
 
    #不正常的访问不缓存
    if (req.request != "GET" &&
        req.request != "HEAD" &&
        req.request != "PUT" &&
        req.request != "POST" &&
        req.request != "TRACE" &&
        req.request != "OPTIONS" &&
        req.request != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        /* We only deal with GET and HEAD by default */
        return (pass);
    }
 
    #不缓存认证信息和Cookie
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
 
    #定义清楚缓存IP,调用上面的Acl
    if (req.request == "PURGE"){             #使用PURGE命令清除缓存
        if(!client.ip ~ purgers){             #非ACl定义的IP,则不能清除缓存
            error 405 "Method not allowed";
        }
        return (lookup);
    }
 
    #支持压缩功能
    if (req.http.Accept-Encoding) {
        if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") {
            # No point in compressing these
            remove req.http.Accept-Encoding;
        } else if (req.http.Accept-Encoding ~ "gzip") {
            set req.http.Accept-Encoding = "gzip";
        } else if (req.http.Accept-Encoding ~ "deflate") {
            set req.http.Accept-Encoding = "deflate";
        } else {
            remove req.http.Accept-Encoding;
        }
    }
}
 
############vcl_hit函数段##############
sub vcl_hit {
    if (req.request == "PURGE"){               #请求方法是PURGE,这清理缓存
        purge;
        error 200 "Purged";
    }
}
 
############vcl_miss函数段##############
 
sub vcl_miss {
    if (req.request == "PURGE"){
          purge;
        error 404 "Not in cache";
    }
}
############vcl_pass函数段##############
 
sub vcl_pass {
    if (req.request == "PURGE"){
        error 502 "PURGE on a passed object";
    }
}
 
############vcl_fetch函数段##############
sub vcl_fetch {
    #定义缓存时长
    if (req.request == "GET" && req.url ~ "\.html$") {
        set beresp.ttl = 300s;                        #超时时长为300秒 
        if (req.request == "GET" && req.url ~ "\.(png|xsl|xml|pdf|ppt|doc|docx|chm|rar|zip|bmp|jpeg|swf|ico|mp3|mp4|rmvb|ogg|mov|avi|wmv|swf|txt|png|gif|jpg|css|js|html|htm)$") {
            set beresp.ttl = 600s;
        }
        return (deliver);
    }
}
############vcl_deliver函数段##############
sub vcl_deliver {
    #定义Header标识,判断缓存是否命中
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";                #命中则返回HIT
    } else {
        set resp.http.X-Cache = "MISS";              #未命中则返回MISS
    }
}

3、4启动Varnish服务


/etc/init.d/varnish start



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值