Haproxy“use_backend”匹配顺序

Haproxy“use_backend”匹配顺序

我在使用 HAProxy 时遇到了问题,这是我的haproxy配置文件以下,

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,它使用眼睛2
  2. 当我访问www.mydomin.com/a/b,它使用眼睛1

但我希望所有的网址都以/A使用 eye2。

我发现,当切换顺序时使用后端如下图所示,

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上也找不到任何解释。

对此有什么想法吗?

答案1

我不知道为什么它对你不起作用,但是 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

如果将配置更改为:

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

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

相关内容