Направіть кілька субдоменів на один сервер із гапрокси


10

Я використовую 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-06ACL лише до двох ACL, один для sub1та один для sub2, просто використовуючи той самий acl <title>у рядку ACL.
Фелікс Френк

Відповіді:


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

Це дуже легко підтримує ці інші файли, оскільки вони просто списки хостів. Це відкриває список тих, хто може їх редагувати, а також наражає на менший ризик. Наприклад, у нас є люди, що редагують такі списки ACL, як це у лялькових, яким взагалі не потрібно знати синтаксис конфігурації HAProxy.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.