我在使用 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
- 当我访问www.mydomin.com/a,它使用眼睛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
。
您能否确认这不是您配置中发生的情况?