Я використовую 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
Чи є спосіб досягти подібного результату в більш стислій формі? Чи ефективний такий перелік, чи було б краще в якийсь момент перейти на регулярний вираз?
regex
, яке насправді є вашою відповіддю. Також зауважте, що ви можете використовуватиhdr_beg
замість того,hdr
щоб ви могли перерахувати лише субдомени. Нарешті, ви повинні мати можливість зібрати вашіgamma00-06
ACL лише до двох ACL, один дляsub1
та один дляsub2
, просто використовуючи той самийacl <title>
у рядку ACL.