Indirizza diversi sottodomini a un singolo backend con haproxy


10

Sto usando haproxy per indirizzare il percorso per diverse applicazioni in esecuzione su un singolo server. Per uno dei domini in uso ci sono diverse dozzine di sottodomini che dovrebbero essere indirizzate a una delle poche applicazioni.

Attualmente, elenco tutti quei sottodomini in una riga separata. La mia configurazione di frontend è simile alla seguente:

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

C'è un modo per ottenere un risultato simile in forma più concisa? Tale elenco è efficace o sarebbe meglio passare a una regex ad un certo punto?


Heh, la tua domanda contiene la parola chiave regex, che in effetti è la tua risposta, credo. Si noti inoltre che è possibile utilizzare hdr_beganziché in hdrmodo da poter enumerare solo i sottodomini. Infine, dovrebbe essere possibile comprimere i tuoi gamma00-06ACL in soli due ACL, uno per sub1e uno per sub2, semplicemente usando lo stesso acl <title>nella riga ACL.
Felix Frank,

Risposte:


15

Per mantenere le prestazioni al massimo (evitando una regex ad ogni colpo) ma purificando la configurazione, utilizzerei un file esterno per i tuoi ACL qui. Ad esempio supponiamo che tu avessi un file chiamato /etc/haproxy/sub1urls, che era esattamente questo:

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

Quindi nella tua configurazione l'ACL potrebbe essere semplicemente:

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

Mettere gli altri host in un sub2urlsfile allo stesso modo riduce la configurazione a:

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

Ciò semplifica la gestione di quegli altri file, poiché sono solo elenchi di host. Apre l'elenco di chi può modificarli ed espone anche meno rischi. Ad esempio, abbiamo persone che modificano questi elenchi ACL in questo modo nelle marionette che non devono assolutamente conoscere la sintassi della configurazione HAProxy.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.