haproxy 在 ACL 表达式中缺少获取方法
haproxy missing fetch method in ACL expression
我在 ha 代理中使用这些条件
use_backend test if { path_beg -i /test/ } { { ssl_fc_has_crt } || { src 10.0.0.25 } || { src 10.1.0.152 } || { src 10.0.2.41 } || { src 10.0.0.158} || { src 64.32.12.252 } || { src 35.43.19.101 } || { src 80.240.254.1 } || { src 82.10.80.7 } }
但是我看到了这个错误:
error detected while parsing switching rule : missing fetch method in ACL expression '{'.
文档显示 { }
好像它可以对 ACL 进行分组,但没有详细说明:
A condition is formed as a disjunctive form:
[!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
所以也许它根本就不是分组。我能看到的带有 {}
的所有示例都是针对匿名 ACL 的。
您想在一种情况下将 AND 与 OR 结合使用,而 haproxy 不是很有帮助,但这里应该可以工作:
acl allowed_to_test_site src 10.0.0.25 10.0.0.24 10.1.0.152 10.0.2.41 10.0.0.158 64.32.12.252 35.43.19.101 80.240.254.1 82.10.80.7
acl allowed_to_test_site ssl_fc_has_crt
use_backend backend-sonar if { path_beg -i /test/ } allowed_to_test_site
这里要说明几点:
- 源IP1 || src IP2 可以声明为
acl ip src IP1 IP2
等等。这样的列表作为多个 OR
- 多次声明 ACL 再次作为多个 OR
Docs 说:
acl <aclname> <criterion> [flags] [operator] <value> ...
Declare or complete an access list.
这可以使用更明确的解释
3. AND是隐含的
这样我们就得到了(path_beg -i /test/) AND ( ssl_fc_has_crt OR src matches one of the IPs)
的逻辑
也许有一天 haproxy 会有更好的语法。
我在 ha 代理中使用这些条件
use_backend test if { path_beg -i /test/ } { { ssl_fc_has_crt } || { src 10.0.0.25 } || { src 10.1.0.152 } || { src 10.0.2.41 } || { src 10.0.0.158} || { src 64.32.12.252 } || { src 35.43.19.101 } || { src 80.240.254.1 } || { src 82.10.80.7 } }
但是我看到了这个错误:
error detected while parsing switching rule : missing fetch method in ACL expression '{'.
文档显示 { }
好像它可以对 ACL 进行分组,但没有详细说明:
A condition is formed as a disjunctive form:
[!]acl1 [!]acl2 ... [!]acln { or [!]acl1 [!]acl2 ... [!]acln } ...
所以也许它根本就不是分组。我能看到的带有 {}
的所有示例都是针对匿名 ACL 的。
您想在一种情况下将 AND 与 OR 结合使用,而 haproxy 不是很有帮助,但这里应该可以工作:
acl allowed_to_test_site src 10.0.0.25 10.0.0.24 10.1.0.152 10.0.2.41 10.0.0.158 64.32.12.252 35.43.19.101 80.240.254.1 82.10.80.7
acl allowed_to_test_site ssl_fc_has_crt
use_backend backend-sonar if { path_beg -i /test/ } allowed_to_test_site
这里要说明几点:
- 源IP1 || src IP2 可以声明为
acl ip src IP1 IP2
等等。这样的列表作为多个 OR - 多次声明 ACL 再次作为多个 OR
Docs 说:
acl <aclname> <criterion> [flags] [operator] <value> ...
Declare or complete an access list.
这可以使用更明确的解释 3. AND是隐含的
这样我们就得到了(path_beg -i /test/) AND ( ssl_fc_has_crt OR src matches one of the IPs)
的逻辑
也许有一天 haproxy 会有更好的语法。