首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在清漆4中重试时更改后端

在清漆4中重试时更改后端
EN

Stack Overflow用户
提问于 2016-02-18 00:11:20
回答 1查看 5.5K关注 0票数 9

我希望能够在Varish4中的重试中更改后端。我们已经使用Varnix3在另一个(旧的)应用程序上工作,但是我还无法为v4找到它,也找不到很多文档。我们想要的设置是有2组控制器--一组用于初始请求,用于在与清漆相同的数据中心中尝试本地服务器,因为这要快得多,然后只有在失败的情况下,才能从其他数据中心中的服务器中随机选择不同的控制器。

在v3中,这很简单:

代码语言:javascript
运行
复制
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中,可以在注意到后端响应错误后返回(重新启动),以更改为不同的后端。 这现在被称为返回(重试),并跳回vcl_backend_fetch。 这只影响后端获取线程,客户端处理不受影响.

然而,我仍然看到一些人的示例代码,其中包含返回(重新启动)而不是返回(重试),而且没有一个使用retry命令的示例。

我理解清漆不应该再次在vcl_recv中完成所有的工作(比如剥离cookie),因为只有与后端的通信失败了,所以返回后端获取而不是重做所有前端处理是有意义的,但是如果我试图更改vcl_backend_fetch中的后端,则会出现编译错误。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 22:06:05

正式文件有点误导人。事实上,重新启动仍然存在:您可以捕获vcl_deliver中的错误,并使用在vcl_recv中相应地设置后端。

代码语言:javascript
运行
复制
sub vcl_recv {
    if (req.restarts == 0) {
        set req.backend_hint = defaultdirector.backend();
    } else {
        set req.backend_hint = backupdirector.backend();
    }
}

sub vcl_deliver {
    if (resp.status >= 500 && req.restarts < some_max) {
        return(restart);
    }
}

或者,如果更合适,可以在vcl_backend_responsevcl_backend_fetch之间使用retry

代码语言:javascript
运行
复制
sub vcl_backend_fetch {
    if (bereq.retries > 0) {
        set bereq.backend = backupdirector.backend();
    }
}

sub vcl_backend_response {
    if (beresp.status >= 500 && bereq.retries < some_max) {
        return(retry);
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35470333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档