Varnish VCL - 如何检查req.backend_hint?

时间:2017-04-11 21:57:08

标签: varnish varnish-vcl varnish-4

我有以下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路径分配给备用路径,则以一种方式重写URL路径,如果将它们分配给后端2,则将另一种方式重写。

我的问题是在行之后

set req.backend_hint = random_director.backend();

我无法确定用户被分配到哪个后端。换句话说,我不知道如何检查req.backend_hint。

我尝试使用

std.log(req.backend_hint.host);

但是会抛出编译错误(不是STRING_LIST)。

我上面的例子改编自:http://book.varnish-software.com/4.0/chapters/Saving_a_Request.html

所以,我的问题是:我如何检查req.backend_hint?

0 个答案:

没有答案