access-control-list – 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级别的性能,那么我建议只为每个子域使用一个单独的HAProxy实例.例如,创建一个新的HAProxy服务器,并将a.domain.com直接指向新服务器.您还可以继续将所有DNS条目指向主HAProxy服务器,并使第一个HAProxy层仅处理子域匹配.

当然,如果你真的没有性能问题,那么也许最好不要单独留下.

转载注明原文:access-control-list – haproxy:有没有办法将acls分组以提高效率? - 代码日志