我有以下 VCL 文件:
vcl 4.0;
import std;
import directors;
backend one {
.host = "localhost";
.port = "3333";
}
backend two {
.host = "127.0.0.1";
.port = "3334";
}
sub vcl_init {
new random_director = directors.random();
random_director.add_backend(one, 10); # 2/3 to backend one
random_director.add_backend(two, 5); # 1/3 to backend two
}
sub vcl_recv {
set req.backend_hint = random_director.backend();
std.log(req.backend_hint.host);
}
这个概念是我想在将用户随机分配到后端后重新编写 req.url 。
因此,当新用户到达时,他们将被随机分配到后端。然后,我将添加一些带有 if 语句的逻辑,以一种方式重写 URL 路径,如果它们被分配给支持的路径,另一种方式,如果它们被分配给后端 2。
我的问题是在线路之后
set req.backend_hint = random_director.backend();
我无法弄清楚用户被分配到哪个后端。换句话说,我不知道如何检查 req.backend_hint。
我试着用
标准日志(req.backend_hint.host);
但这会引发编译错误(不是 STRING_LIST)。
我上面的例子改编自这里:http ://book.varnish-software.com/4.0/chapters/Saving_a_Request.html
所以,我的问题是:如何检查 req.backend_hint?