![如何在 HAProxy 中设置嵌套 acl 规则?](https://linux22.com/image/706447/%E5%A6%82%E4%BD%95%E5%9C%A8%20HAProxy%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%E5%B5%8C%E5%A5%97%20acl%20%E8%A7%84%E5%88%99%EF%BC%9F.png)
我使用同一个 HAProxy 实例从我的域提供多个服务,分别位于domain.com/s1/
和domain.com/s2/
。我希望仅在满足某些条件时执行某些操作(包括 ACL 匹配)之内 s2
. 使用acl
类似
acl service_1 path_beg /s1/
acl service_2 path_beg /s2/
acl service_1_path_1 path_beg /s2/path1/
acl service_1_path_2 path_beg /s2/path2/
将导致全部s2/path1/
请求与和模式匹配/s2/path2/
,如果我知道绝大多数请求都是针对的,这就很浪费了s1
。
有没有办法可以说“仅当 acl匹配时才评估path_1
或模式”?path_2
service_2
请注意,这不是想要满足AND
两个条件的情况;我希望除非第一个条件匹配,否则第二个条件acl
甚至不会被计算。这在 HAProxy 中可能吗?
答案1
HAProxy 多条件示例
以下是我使用的一个例子:
acl bot_ok path_end txt
acl bot_ok url_reg ^/$
acl derpy3 hdr_sub(user-agent) -i bash curl wget slack
acl derpy3 req.ver !1.1
http-request silent-drop if derpy3 !bot_ok
让机器人进入和/或使用 1.1 以外的 http 协议如果他们击中/
或.txt
文件。
我们定义多个 acl,然后在操作上设置条件和/或否定条件。