Я использую haproxy для прямого маршрута для нескольких приложений, работающих на одном сервере. Для одного из используемых доменов существует несколько десятков поддоменов, которые должны быть направлены в одно из нескольких приложений.
В настоящее время я перечисляю все эти субдомены в отдельной строке. Моя конфигурация внешнего интерфейса выглядит так:
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
Есть ли способ добиться аналогичного результата в более сжатой форме? Является ли такой листинг эффективным, или в какой-то момент лучше перейти на регулярное выражение?
proxy
load-balancing
haproxy
Юбер О.Г.
источник
источник
regex
, которое, по-моему, и есть твой ответ. Также обратите внимание, что вы можете использоватьhdr_beg
вместоhdr
так, чтобы вы могли перечислить только субдомены. Наконец, должна быть возможность свернуть вашиgamma00-06
ACL до двух ACL, один дляsub1
и один дляsub2
, просто используя ихacl <title>
в строке ACL.Ответы:
Чтобы сохранить максимальную производительность (избегая регулярных выражений при каждом ударе), но все же очистить конфигурацию, я бы использовал здесь внешний файл для ваших ACL. Например, допустим, у вас есть файл с именем
/etc/haproxy/sub1urls
, который был именно таким:Тогда в вашем конфиге ACL может быть просто:
Размещение других хостов в
sub2urls
файле таким же образом уменьшает ваши настройки до:Это позволяет очень легко поддерживать эти другие файлы, так как они являются просто списками хостов. Он открывает список тех, кто может их редактировать, а также подвергает меньшему риску. Например, у нас есть люди, редактирующие эти списки ACL, подобные этому, в puppet, которым совсем не нужно знать синтаксис конфигурации HAProxy.
источник