我有两个URL如下。
https://xyz.test.com/abc
and
https://xyz-a.test.com/abc
我将haproxy ACL定义为: -
acl is_1 path_beg /abc
use_backend server_1 if is_1
acl is_2 hdr(host) -i xyz-a.test.com
use_backend server_2 if is_2
然而它总是在服务器1上结束。即使我尝试通过URL浏览它
https://xyz-a.test.com/abc
请建议我如何处理上述情况。
我可以使用如下的acl来解决它: -
acl is_1 hdr(host) -i xyz.test.com
use_backend server_1 if is_1
acl is_2 hdr(host) -i xyz-a.test.com
use_backend server_2 if is_2
但是我想保留第一个acl: -
acl is_1 path_beg /abc
use_backend server_1 if is_1
任何建议!!!
答案 0 :(得分:1)
有几种不同的方法可以解决这个问题。这是最简单的一个:只需颠倒你的use_backend语句的顺序!
acl is_1 path_beg /abc
acl is_2 hdr(host) -i xyz-a.test.com
use_backend server_2 if is_2
use_backend server_1 if is_1
另一种方法是使用AND条件,这在HAproxy中看起来有点奇怪(你只需要附加你想要的ACL,可能还有修饰符):
acl is_1 path_beg /abc
acl is_2 hdr(host) -i xyz-a.test.com
use_backend server_1 if is_1 !is_2
use_backend server_2 if is_2
答案 1 :(得分:0)
关键是您必须在第一行使用较长的 acl
短语,然后在下一行添加较短的短语。
因为 haproxy 会逐行检查。