1

根据请求 uri,我想使用 mysql 数据库中的数据将带有清漆的请求转发到不同的服务器。该数据库包含 2 个字段:name 和 base_url。如果请求转到 /forwards/%name% 我想将请求转发到由 base_url 定义的服务器/后端。我的第一次尝试是使用 VRT_SetHdr 设置现有后端,但这不起作用:

VRT_SetHdr(sp, HDR_REQ, "\010backend:", my_backend, vrt_magic_string_end);

也许可以设置一个像 X-backend 这样的标题,然后用普通的 VCL 进行选择?

我还想使用来自 mysql 的相同数据在运行时定义后端。这可能吗?

4

1 回答 1

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";
    }
  }
  # ...
}
于 2013-07-05T11:51:39.857 回答