Haproxy“use_backend”匹配顺序

我有一个HAProxy的问题,这是我的haproxy.cfg下面的一个片段,

acl url_a path_beg /a acl dom_eye hdr_dom(host) -i www.mydomin.com use_backend eye1 if dom_eye use_backend eye2 if dom_eye url_a 
  1. 当我访问www.mydomin.com/a时 ,它使用eye2
  2. 当我访问www.mydomin.com/a/b时 ,它使用eye1

但我希望所有的url都以/ eye2开头。

而且,我发现当像下面那样切换use_backend的顺序时,

 acl url_a path_beg /a acl dom_eye hdr_dom(host) -i www.mydomin.com use_backend eye2 if dom_eye url_a use_backend eye1 if dom_eye 

它为我工作。

但是我不明白Haproxy的“匹配规则”,并且找不到任何来自google的解释。

任何想法呢?

我不知道为什么它不适合你,但HAProxy文档指出:

根据需要可能有许多“use_backend”规则。 所有这些规则都以它们的声明顺序进行评估,匹配的第一个规则将分配后端。

来自: http : //cbonte.github.io/haproxy-dconv/configuration-1.4.html#4-use_backend

看你的代码:

 acl url_a path_beg /a acl dom_eye hdr_dom(host) -i www.mydomin.com use_backend eye1 if dom_eye use_backend eye2 if dom_eye url_a 

我期望以下结果:

 www.mydomin.com -> eye1 www.mydomin.com/a -> eye1 www.mydomin.com/a/b -> eye1 

因为它们全部匹配第一个use_backend

如果您将configuration更改为:

 acl url_a path_beg /a acl dom_eye hdr_dom(host) -i www.mydomin.com use_backend eye2 if dom_eye url_a use_backend eye1 if dom_eye 

我会期待这些结果:

 www.mydomin.com -> eye1 www.mydomin.com/a -> eye2 www.mydomin.com/a/b -> eye2 

因为只有URL 2和3匹配第一个use_backend

你能确认这不是在你的configuration中发生了什么?