【发布时间】:2016-05-29 23:05:06
【问题描述】:
我希望能够在 Varnish 4 中重试时更改后端。我们已经在使用 Varnish 3 的不同(旧)应用程序上进行了这项工作,但我无法弄清楚v4,也找不到太多文档。我们想要的设置是有 2 套导向器 - 一套用于初始请求,尝试与 varnish 位于同一数据中心的本地服务器,因为这样更快,然后只有在失败时,从不同导向器中随机选择其他服务器数据中心。
在 v3 中,这很容易:
sub vcl_recv {
if (req.restarts == 0) {
set req.backend = defaultdirector;
} else {
set req.backend = backupdirector;
}
}
#Then in vcl_fetch and/or vcl_error something like:
if (beresp.status >= 500 && req.restarts < some_max) {
return(restart);
}
但现在在 v4 中,重启应该被替换为重试,整个文档如下:
在 3.0 中,可以在注意到后端响应错误后执行 return(restart),以更改为不同的后端。
这现在称为 return(retry),并跳回到 vcl_backend_fetch。
这只影响后端获取线程,不影响客户端处理。
但我仍然看到一些人的示例代码包含 return(restart) 而不是 return(retry),并且没有一个使用 retry 命令的示例。
我知道 varnish 不应该再次完成 vcl_recv 中的所有工作(例如剥离 cookie),因为只有与后端的通信失败,所以反弹回后端获取确实有意义而不是重做所有前端处理,但是如果我尝试在 vcl_backend_fetch 中更改后端,则会出现编译错误。我该如何完成这项工作?
【问题讨论】:
标签: varnish varnish-vcl