我正在尝试测量一个网页的两个不同版本的单独统计数据。因此,我需要将一定比例的网络流量重定向到与请求页面不同的页面(即,20% 的 page_1 请求转到 page_1.1)。
在我看来,Varnish 无法原生计算流量或请求。
我在想,我可以让 Apache 后端计算请求数,插入自定义标头,然后让 Varnish 在后端响应包含该特定标头时向客户端发送重新启动。
有什么想法或建议吗?
干杯,
杰里米
编辑:我忘了提到 Varnish 前面有一个 HAProxy 实例,所以我想另一个好方法是:
在 HAProxy 上:
计数第 1 页的请求数
,如果计数 > 80,则插入自定义标头,
如果计数 = 100,则重置计数器
在 Varnish 上,
如果请求中存在自定义标头,则发出客户端重新启动并重写 page1—>page1.1
不确定如何使用 ACL、gpc0 和 stick-tables 来实现这一点。我正在研究寻找解决方案 :-)
与往常一样,我们非常欢迎您提出想法或建议
答案1
我从来没有配置过 Varnish 服务器,但我想这可以使用内置负载均衡器采用循环配置。
例如,如果您配置了 4 个指向网站/页面旧版本的后端,并且 1 个指向新版本的后端,如下所示:
backend old1 {
.host = "old.example.com";
.probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old2 {
.host = "old.example.com";
.probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old3 {
.host = "old.example.com";
.probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend old4 {
.host = "old.example.com";
.probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
backend new {
.host = "new.example.com";
.probe = { .url = "/"; .interval = 5s; .timeout = 1 s; .window = 5; .threshold = 3; }
}
然后让一位导演在他们之间轮流做决定……
director blah round-robin {
{ .backend = old1; }
{ .backend = old2; }
{ .backend = old3; }
{ .backend = old4; }
{ .backend = new; }
}
该网站的 new.example.com 版本将获得 20% 的流量。
这有点像黑客行为(可能有更好的解决方案)但我相信这会起作用。