Direcione vários subdomínios para um único back-end com haproxy


10

Estou usando o haproxy para direcionar a rota para vários aplicativos em execução em um único servidor. Para um dos domínios em uso, existem várias dezenas de subdomínios que devem ser direcionados para um dos poucos aplicativos.

Atualmente, listo todos esses subdomínios em uma linha de separação. Minha configuração de front-end é assim:

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

Existe uma maneira de obter um resultado semelhante de forma mais concisa? Essa listagem é eficaz ou seria melhor mudar para uma regex em algum momento?


Heh, sua pergunta contém a palavra-chave regex, que é de fato sua resposta, acredito. Observe também que você pode usar em hdr_begvez de, hdrpara enumerar apenas os subdomínios. Por fim, deve ser possível recolher suas gamma00-06ACLs para apenas duas ACLs, uma para sub1e outra sub2, simplesmente usando o mesmo acl <title>na linha da ACL.
Felix Frank

Respostas:


15

Para manter o desempenho no máximo (evitando uma regex a cada ocorrência), mas ainda limpando a configuração, eu usaria um arquivo externo para suas ACLs aqui. Por exemplo, digamos que você tinha um arquivo chamado /etc/haproxy/sub1urls, que era exatamente isso:

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

Então, na sua configuração, a ACL poderia ser simplesmente:

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

Colocar os outros hosts em um sub2urlsarquivo da mesma maneira reduz sua configuração para:

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

Isso facilita muito a manutenção desses outros arquivos, pois eles são apenas listas de hosts. Ele abre a lista de quem pode editá-los e expõe menos riscos também. Por exemplo, temos pessoas editando essas listas de ACL como estas em fantoches que não precisam conhecer a sintaxe de configuração do HAProxy.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.