让我们有以下后端配置:
HAProxy version 2.4.24-0ubuntu0.22.04.1 2023/10/31 - https://haproxy.org/
backend back-test
http-request set-var(req.instance) hdr(X-Instance-Name)
http-request set-var(req.instance) urlp(instanceName) unless { var(req.instance) -m found }
# force-persist if { var(req.instance) -m str 1 2 } #1
# acl acl-force-persist var(req.instance) -m str 1 2 #2
acl acl-force-persist urlp(instanceName) -m str 1 2
acl acl-force-persist hdr(X-Push-Service-Instance-Name) -m str 1 2
force-persist if acl-force-persist
use-server srv-production-1 if { var(req.instance) -m str 1 }
use-server srv-production-2 if { var(req.instance) -m str 2 }
- 注释中的行没有按我预期的那样工作。
- 未注释的行可正常工作。
- 该
use-server
语句根据req.instance
变量值正确运行,因此我希望内联 ACL 形式也是正确的,因为变量定义和变量值在运行时从 header 或 url 参数中提取。 - 该
http-request
语句还可以使用带有变量检查谓词的内联 ACL 正确运行。 - 不幸的是,当在语句中使用相同的 ACL 形式时
force-persist
,它的行为就像总是FALSE
提供一样(行#1
)。 - 类似地,对于 ACL 定义本身,看起来变量没有值(行
#2
),因此必须以更详细/重复的方式定义 ACL(如下)。
注释行中的期望有何错误?
- 对于某些配置语句使用内联 ACL 是否不“合法”?
- 在 ACL 定义中使用请求变量是否“合法”?