我想使用正则表达式捕获在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”模式。
答案 0 :(得分:1)
您不能使用字符串引用后端。 VCL编译器不支持它。你可以写一个特殊的导演(vmod)为你做这项工作,但这需要你拿出你的K& R副本并开始在Varnish源代码树中挖掘。
如果有人会在某天写一个VMOD来做这样的事情,我不会感到惊讶。这将非常有用。