HAPROXY ACL用于相同上下文的不同主机

时间:2016-08-05 11:54:25

标签: haproxy

我有两个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

任何建议!!!

2 个答案:

答案 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 会逐行检查。