HAProxy配置ACL规则提示missing fetch method错误如何解决?
错误原因
- HAProxy的ACL规则解析要求每个
{}包裹的是单个独立的匹配表达式,你原有配置中所有SSL证书校验、IP白名单的条件外层多套了一层冗余的{},解析器无法识别这个多余大括号对应的匹配方法,直接触发missing fetch method in ACL expression '{'报错。
修复方案
方案1:直接删除冗余大括号(最小改动)
直接删掉逻辑或组合条件外层多余的大括号即可,修正后的规则如下:
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 }
方案2:提前定义ACL(更易维护)
你也可以提前把匹配规则定义成独立ACL,写法更清晰,后续调整白名单也更方便:
# 定义路径匹配规则 acl is_test_path path_beg -i /test/ # 定义访问许可规则:有SSL客户端证书 或 匹配白名单IP acl allow_access ssl_fc_has_crt acl allow_access src 10.0.0.25 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 # 满足两个条件时转发到test后端 use_backend test if is_test_path allow_access
内容的提问来源于stack exchange,提问作者karlos
相关产品推荐
相关产品推荐

