使用正则表达式捕获选择清漆后端

时间:2014-06-17 14:13:13

标签: varnish varnish-vcl

我想使用正则表达式捕获在varnish中路由子域。这是我的尝试:

backend gitlab {
    .host = "127.0.0.1";
    .port = "82";
}

backend jenkins {
    .host = "127.0.0.1";
    .port = "83";
}

sub vcl_recv {

    if (req.http.host ~ "^((gitlab|jenkins|ruby))\.") {

        set req.backend = $1;
        return(pass);

    }

    error 405 "No service.";

}

如何在VCL中实现这种结构?我宁愿不使用不那么优雅的“if-then”模式。

1 个答案:

答案 0 :(得分:1)

您不能使用字符串引用后端。 VCL编译器不支持它。你可以写一个特殊的导演(vmod)为你做这项工作,但这需要你拿出你的K& R副本并开始在Varnish源代码树中挖掘。

如果有人会在某天写一个VMOD来做这样的事情,我不会感到惊讶。这将非常有用。