根据请求uri,我想使用来自mysql数据库的数据将带有varnish的请求转发到不同的服务器。该数据库包含2个字段:name和base_url。如果请求转到/转发/%name%,我想将请求转发到base_url定义的服务器/后端。我首先尝试使用VRT_SetHdr设置现有后端,但这不起作用:
VRT_SetHdr(sp, HDR_REQ, "\010backend:", my_backend, vrt_magic_string_end);
也许可以设置像X-backend这样的标题,然后用普通的VCL进行选择?
我还想使用mysql中的相同数据在运行时定义后端。这还有可能吗?
答案 0 :(得分:1)
正如您所说,如果设置了标头,您可以在VCL中切换后端,前提是每个后端都在VCL中预先声明:
vcl_recv {
# ...
if ( req.http.X-backend ) {
set req.backend = req.http.X-backend;
}
# ...
}
编辑: 正如@Bhaskar在他的评论中指出的那样,由于清漆结构分配限制,每个后端需要额外的if。类似的东西:
vcl_recv {
# ...
if ( req.http.X-backend ) {
if ( req.http.X-backend == "predefined" ) {
set req.backend = "predefined";
}
}
# ...
}