haproxy:有没有办法将acls分组以提高效率?

我在前端有一些逻辑,根据主机和url路由到不同的后端。 逻辑上看起来像这样:

if hdr(host) ends with 'a.domain.com': if url starts with '/dir1/': use backend domain.com/dir1/ elif url starts with '/dir2/': use backend domain.com/dir2/ # ... else if ladder repeats on different dirs elif hdr(host) ends with 'b.domain.com': # another else if ladder exactly the same as above # ... # ... else if ladder repeats like this on different domains 

有没有办法将acls分组以避免重复检查域acl?

显然,每个可能性都需要使用后端语句,但是我不想一遍又一遍地检查域,因为效率非常低。

换句话说,我想避免这个:

 use backend domain.com/url1/ if acl-domain.com and acl-url1 use backend domain.com/url2/ if acl-domain.com and acl-url2 use backend domain.com/url3/ if acl-domain.com and acl-url3 # tons more possibilities below 

因为它必须继续检查acl-domain.com。

这是一个特别的问题,因为我对子域名(如a.domain.com和b.domain.com)有特定的规则,但我想回到* .domain.com最常见的情况。 这意味着每个使用特定子域的规则都必须在* .domain.com之前进行检查,这对于常见情况来说更为低效。

您是否遇到当前应用程序的性能问题?

如果你确实需要提高HAProxy级别的性能,那么我build议你简单地为每个子域使用一个单独的HAProxy实例。 例如,创build一个新的HAProxy服务器,并将a.domain.com直接指向新的服务器。 您还可以继续将所有DNS条目指向主HAProxy服务器,并使第一个HAProxy图层仅处理子域匹配。

当然,如果你没有真正的性能问题,那么也许最好是单独离开。