我使用相同的HAProxy实例从域中提供多个服务,位于domain.com/s1/和domain.com/s2/ 。 只有在 s2 内满足某些条件的情况下,才想进行一些操作(包括ACL匹配)。 用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/ patterns,如果我知道绝大多数请求是针对s1 ,这是浪费的。
有没有一种方法可以说“仅在acl service_2匹配时才评估path_1或path_2模式”?
请注意,这不是一个想要AND两个条件的情况; 我想第二个acl甚至不计算,除非第一个匹配。 这甚至可能在HAProxy?
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,然后设置行动的条件和/或否定条件。