4

我有非常复杂的清漆配置。我不能真正使用导演并手动完成路线。

//webservice1 and webservice2 has probes working there

set req.backend = webservice1;
if (req.backend.healthy)
{ 
     #redirect there 
}

set req.backend = webservice2;
if(req.backend.healthy)
{ 
     #change parameters with regex and redirect
}

这行得通。但看起来真的很蹩脚。

是否有任何“合法”的方式来确定后端是否健康?像这样:

if(webservice2.healthy)
{ 
     #change parameters with regex and redirect
}

这显然是行不通的。

4

2 回答 2

2

在用谷歌进行大量搜索后,我找到了这个链接,他们正在谈论迁移到 V4。

编码 :

if(!req.backend.healthy) {
  #your logic
}

对清漆 3 有效,对清漆 4 无效。

对于清漆 4:

看看这里: https ://www.varnish-cache.org/docs/4.0/users-guide/vcl-grace.html#users-guide-handling-misbehave-servers

所以解决方案是:

import std;
set req.backend_hint = webservice1;
if (!std.healthy(req.backend_hint)) {
    set req.backend_hint = webservice2;
}

我希望这对你有帮助:)

于 2015-09-19T21:32:31.957 回答
1

我一直在对此进行大量研究,这是完成它的唯一方法(除非您想编写 vmod)。

假设您总是想用 webservice1 做出响应,除非它生病了,我可能会建议进行一些重构:

set req.backend = webservice1;
if(!req.backend.healthy) {
     set req.backend = webservice2;
     #change parameters with regex
}
# redirect here
于 2015-05-28T18:49:46.627 回答