Haproxy“use_backend”匹配顺序

gla*_*esx 8 rewrite haproxy

我的 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
Run Code Online (Sandbox Code Playgroud)
  1. 当我访问www.mydomin.com/a 时,它使用eye2
  2. 当我访问www.mydomin.com/a/b 时,它使用eye1

但我希望所有的 url 都以/a开头,使用 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
Run Code Online (Sandbox Code Playgroud)

它对我有用。

但是我不明白Haproxy的“匹配顺序规则”,也找不到谷歌的任何解释。

对此有何想法?

Luc*_*oed 13

我不知道为什么它对你不起作用,但 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
Run Code Online (Sandbox Code Playgroud)

我希望得到以下结果:

www.mydomin.com -> eye1
www.mydomin.com/a -> eye1
www.mydomin.com/a/b -> eye1
Run Code Online (Sandbox Code Playgroud)

因为他们都匹配第一个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
Run Code Online (Sandbox Code Playgroud)

我希望这些结果:

www.mydomin.com -> eye1
www.mydomin.com/a -> eye2
www.mydomin.com/a/b -> eye2
Run Code Online (Sandbox Code Playgroud)

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

您能否确认这不是您的配置中发生的情况?