2016-08-05 77 views
0

我有两个URL,如下所示。HAPROXY ACL适用于相同上下文不同的主机

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 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

我m投票结束这个问题作为脱离主题,因为它是关于配置haproxy。 –

回答

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 
+0

考虑到您提供的第一个解决方案,是在haproxy中使用后端事务的位置? 这些事情究竟是如何发挥作用的,以便改变立场使其发挥作用? –

+0

就像命令式的计算机程序一样,语句按顺序进行评估。匹配其条件的第一个use_backend语句将触发。否则,它将使用default_backend。 – mwp

相关问题