Прямые несколько субдоменов к единственному бэкенду с haproxy

Я использую haproxy для прямого маршрута для нескольких приложений, работающих на единственном сервере. Для одного из доменов, используемых существует несколько десятков субдоменов, которые должны быть направлены к одному из нескольких приложений.

В настоящее время я перечисляю все те субдомены в separte строке. Моя frontend конфигурация похожа на это:

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 в какой-то момент?

10
задан 10 June 2014 в 14:06
1 ответ

Чтобы сохранить максимальную производительность (избегая повторения каждого удара), но при этом очистить конфигурацию, я бы использовал внешний файл для ваших 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

Это облегчает поддержку этих других файлов, так как это всего лишь списки хостов. Это открывает список того, кто может их редактировать, и подвергает меньшим рискам. Например, у нас есть люди, которые редактируют эти ACL-списки вот так в марионетках, которым вообще не нужно знать синтаксис HAProxy config.

.
14
ответ дан 2 December 2019 в 22:06

Теги

Похожие вопросы