varnish 实现反向代理的配置

varnish配置
典型的vcl配置,编辑default.vcl配置脚本,根据自己的实际需求调整

#backend 定义后端服务器:告诉varnish遇到http请求应该从哪里去获取请求对应的内容
#指定web服务器地址host,指定varnish运行端口port
#一般来说,varnish先从缓存查找,如果没命中才会去后端服务器请求
backend ihs1 {
.host = “127.0.0.1”;
.port = “8080”;
}

#如果有多个web/应用服务器,说明你有负载均衡设置,那么定义多个后端服务器即可
backend ihs2 {
.host = “127.0.0.1”;
.port = “8080”;
}

#定义varnish允许来自哪些IP段的清楚缓存的命令
acl purge {
“localhost”;
“127.0.0.1”;
“10.23.17.0”/24;
}

#如果多个web服务器要做负载均衡,就这么配置
#director 还有多种方式可以指定
director ihs_director round-robin {
{ .backend = ihs1;}
{ .backend = ihs2;} # 有多个则加多个后端服务器即可
}

#处理http请求
sub vcl_recv {
set req.backend = ihs_director;

#如果是get请求则尝试从缓存查找,因为POST请求一般是表单提交,不要缓存
if(req.request == "GET" && req.url ~ "^/.*$") {
	unset req.http.cookie;
	if (! req.backend.healthy) {
		set req.grace = 30m;
	} else {
		set req.grace = 15s;
	}
	if(req.restarts == 0){
		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;
		}
	}
	return (lookup);
}

#如果是BAN命令,说明收到来自客户端清除varnish缓存的命令
if (req.request == "BAN") {
            if (!client.ip ~ purge) {
                    error 405 "Not allowed";
            }
            set req.url = regsuball(req.url,"%28","(");
            set req.url = regsuball(req.url,"%29",")");
            set req.url = regsuball(req.url,"%7C","|");
            if (req.url ~ "^/$") {
                    ban("req.url == " + req.url);
            } else {
                    ban("req.url ~ " + req.url);
            }
            error 200 "Ban added";
    } elsif (req.request == "PURGE") {
            if (!client.ip ~ purge) {
                    error 405 "Not allowed";
            }
            return(lookup);
}

return (pass);

}

#命中
sub vcl_hit {
if (req.request == “PURGE”) {
purge;
error 200 “Purged.”;
}
}

#未命中
sub vcl_miss {
if (req.request == “PURGE”) {
purge;
error 200 “Not in cache.”;
}
}

#处理错误请求
sub vcl_error {
if (obj.status == 750) {
set obj.http.Location = “http://www.suning.com/”;
set obj.status = 302;
}
return(deliver);
}

#表示varnish已经从后端服务器获取内容,现在将控制权交给varnish来处理
#一般情况下,就是将该内容缓存起来
sub vcl_fetch {

if(beresp.status >= 400){
	set beresp.ttl = 0s;
	set beresp.http.Cache-Control = "no-cache,no-store,max-age=0";
}

if(beresp.http.Content-Length == "0" ){
	set beresp.ttl = 0s;
}

if(beresp.http.Cache-Control ~ "no-cache,no-store,max-age=0"){
	set beresp.ttl = 0s; 
}

#定义显示在http请求头中消息
set beresp.http.Server = "SNWS";
set beresp.grace = 30m;
unset beresp.http.Set-Cookie;
set beresp.http.Last-Modified = now;
set beresp.http.magicmarker = "1";

}

sub vcl_deliver{
if (resp.http.magicmarker) {
/* Remove the magic marker /
unset resp.http.magicmarker;
/
By definition we have a fresh object */
set resp.http.age = “0”;
}
#如果命中,定义显示在http请求头消息中的标志
#可应firefox的firebug工具查看这些请求头
if (obj.hits > 0) {
set resp.http.X-Cache = “Test-HIT_24”;
set resp.http.X-Cache-Hits = obj.hits;
} else {
set resp.http.X-Cache = “Test-MISS_24”;
}
unset resp.http.X-Varnish;
unset resp.http.Expires;
set resp.http.Via = “1.1 Xcache_Test_24”;
}

原文:https://blog.csdn.net/gzu_imis/article/details/25658651

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值