Varnish VCL : how can I switch on req. backend_hint?

标签 varnish varnish-vcl varnish-4

我有以下VCL:

vcl 4.0;

import std;
import directors;

backend one {
    .host = "localhost";
    .port = "3333";
}

backend two {
    .host = "localhost";
    .port = "3333";
}

sub vcl_init {
    new random_director = directors.random();
    random_director.add_backend(two, 10);
    random_director.add_backend(one, 8);
}

sub vcl_recv {

    std.log("start vcl_recv");

    set req.backend_hint = random_director.backend();
    if (req.backend_hint == one) {
        std.log("one");
    } else if (req.backend_hint == two) {
        std.log("two");
    } else {
        std.log("neither one");
    }

    std.log("end vcl_recv");
}

当我运行它时,输出始终是:
start vl_recv
neither one
end vcl_recv

如何正确检查以查看选择了哪个后端?

谢谢

最佳答案

vcl_backend_fetch中,您应该可以访问bereq.backend.name
因此,移动代码,您可能会遇到类似以下内容的情况:

sub vcl_backend_fetch {
    if (bereq.backend.name == "one") {
       std.log("one");
    } else if (bereq.backend.name == "two") {
       std.log("two");
    } else {
       std.log("neither one");
    }
}

关于 Varnish VCL : how can I switch on req. backend_hint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357690/

相关文章:

varnish - 我可以在 Varnish 4 中创建类似于 ACL 的自定义值列表吗?

varnish - 查看 Varnish 缓存未命中的URL和后端IP

正则表达式匹配任何不是子模式的东西

apache - [proxy_fcgi :error](70007)The timeout specified has expired

varnish - 访问 Varnish VCL 中后端响应的正文

Varnish 列出缓存中的所有 URL

使用标准输出 Varnish 输出ReqEnd

php - 频繁使用网站的缓存策略

Varnish 缓存v4 : Incorrect Backend Health Check Response

caching - 您如何测试 Varnish 配置或一般的缓存层