J'utilise haproxy pour diriger la route pour plusieurs applications exécutées sur un seul serveur. Pour l'un des domaines utilisés, il existe plusieurs dizaines de sous-domaines qui doivent être adressés à l'une des rares applications.
Actuellement, je liste toutes ces sous-domaines dans une ligne de Séparte. Ma configuration frontale ressemble à ceci:
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-t-il un moyen d'obtenir un résultat similaire à une forme plus concise? Une telle liste est-elle efficace ou serait-il préférable de passer à une regex à un moment donné?
Pour garder les performances à un maximum (évitant une regex à chaque coup) mais nettoyage toujours la configuration, j'utiliserais un fichier externe pour votre ACLS ici. Par exemple, disons que vous aviez un fichier appelé /etc/haproxy/sub1urls
, qui était exactement ceci:
Apple.gamma.com
banana.gamma.com
cherry.gamma.com
Ensuite, dans votre config, l'ACL pourrait simplement être:
acl is_sub1 hdr(Host) -i -f /etc/haproxy/sub1urls
Mettre les autres hôtes dans un sub2urls
Le fichier de la même manière réduit votre configuration jusqu'à:
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
Cela facilite la maintenance de ces autres fichiers, car ils ne sont que des listes d'hôtes. Il ouvre la liste de qui peut les modifier et expose moins de risque. Par exemple, nous avons des personnes éditées ces listes d'ACL comme celle-ci dans la marionnette qui n'a pas à connaître la syntaxe de configuration Haproxy.