使用haproxy将多个子域定向到单个后端


10

我正在使用haproxy来为单个服务器上运行的多个应用程序路由。对于正在使用的域之一,应将几十个子域定向到一些应用程序之一。

目前,我在separte行中列出了所有这些子域。我的前端配置如下所示:

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl gamma00   hdr(host) -i apple.gamma.com
    acl gamma01   hdr(host) -i banana.gamma.com
    acl gamma02   hdr(host) -i cherry.gamma.com
    acl gamma03   hdr(host) -i durian.gamma.com
    acl gamma04   hdr(host) -i elderberry.gamma.com
    acl gamma05   hdr(host) -i fig.gamma.com
    acl gamma06   hdr(host) -i grapefruit.gamma.com
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if gamma00
    use_backend sub1 if gamma01
    use_backend sub1 if gamma02
    use_backend sub2 if gamma03
    use_backend sub2 if gamma04
    use_backend sub2 if gamma05
    use_backend sub2 if gamma06
    use_backend g if gamma

    default_backend default

有没有办法以更简洁的形式获得相似的结果?这样的列表有效吗?还是在某个时候改用正则表达式会更好?


嘿,regex我相信您的问题包含关键字,实际上它就是您的答案。另请注意,您可以使用hdr_beg代替,hdr以便仅枚举子域。最后,只需在ACL行中使用相同的ACL ,就可以将其gamma00-06ACL 折叠为两个ACL,一个用于sub1,另一个用于。sub2acl <title>
菲利克斯·法兰克

Answers:


15

为了使性能最大化(每次命中都要避免使用正则表达式),但仍要清理配置,我会在此处为您的ACL使用外部文件。例如,假设您有一个名为的文件/etc/haproxy/sub1urls,正是这样的:

apple.gamma.com
banana.gamma.com
cherry.gamma.com

然后在您的配置中,ACL可以简单地是:

acl is_sub1 hdr(host) -i -f /etc/haproxy/sub1urls

将其他主机以sub2urls相同的方式放置在文件中会将您的配置缩减为:

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl is_sub1   hdr(host) -i -f /etc/haproxy/sub1urls
    acl is_sub2   hdr(host) -i -f /etc/haproxy/sub2urls
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if is_sub1
    use_backend sub2 if is_sub2
    use_backend g if gamma

    default_backend default

这使得维护其他文件非常容易,因为它们只是主机列表。它打开了可以编辑它们的人员列表,并且风险也较小。例如,我们有一些人在puppet中编辑这些ACL列表,而他们根本不需要了解HAProxy配置语法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.