0

在 recv 子例程中,我目前正在将后端更改为另一个后端来处理请求,我需要声明一个变量来保存它设置为的第一个/原始后端的值,以便在重新启动请求时,我然后可以将后端分配回此。

我不能只使用后端的名称并简单地将其分配回来,因为我需要它是动态的,将它存储在变量中似乎是最简单的解决方案,但我似乎找不到任何关于如何实现这一点的信息通过子程序/重新启动。

如果不可能,是否有任何其他解决方案我可以尝试实现这一目标?据我了解,可能不可能,但即使能够访问定义的后端数组并选择第一个就足够了,我不能依赖命名后端来分配它。

4

1 回答 1

0

不幸的是,不可能将变量声明为BACKEND类型(这是req.backend返回的)。

请参阅此“Fastly Fiddle”示例,该示例演示您将收到以下编译器错误:

预期变量类型,以下之一:BOOL、INTEGER、FLOAT、TIME、RTIME、IP 或 STRING

也没有任何方法可以通过 VCL 获取可用后端的列表。

此外,您需要对后端值进行硬编码(即,您需要明确知道从 VCL 角度定义了哪些后端),因为尝试将后端存储到标头或变量中会将其转换为 STRING 类型表示(例如6kLtu7NicmMs0DtKsuite9--F_origin_0)。

这意味着即使您能够F_origin_0从字符串中解析实际的后端,您也无法将其分配为一个值,req.backend因为它期望该值是类型BACKEND(并且 VCL 没有提供一种方法,AFAIK,将字符串转换为该类型)。

于 2021-06-28T10:10:10.643 回答