Você pode colocar a ACL e o servidor de uso (em vez de usar o backend) na definição de back-end. Além disso, acho que você pode usar ACLs in-line e não necessariamente defini-las antes de usar.
Eu tenho uma configuração com o HaProxy, onde cada servidor haproxy direciona o tráfego para vários servidores de aplicativos. O roteamento para o tráfego http normal é baseado em um hash do URL de solicitação.
Agora, desejo criar algumas regras para permitir que determinadas solicitações administrativas sejam roteadas para servidores de aplicativos específicos. Ou seja, eu tenho servidores de aplicativos "node06 - node15". Eu gostaria de poder solicitar node06.mydomain.com/my-admin-request e ter que ser roteado para o servidor de aplicativos correto.
Eu não posso fazer isso via dns. Todas as solicitações chegam por meio de um único endereço IP exposto no cluster.
Então eu fiz uma configuração haproxy que faz o que eu quero:
frontend www-http
bind :80
reqadd X-Forwarded-Proto:\ http
acl node06 hdr_beg(host) -i node06.
use_backend node06-status if node06
acl node07 hdr_beg(host) -i node07.
use_backend node07-status if node07
# ... and many more such nodes ...
default_backend application-backend
# This is the application back end.
# Route request based on hash of url
backend application-backend
balance url_param url check_post
server node06 192.168.1.70:80 check
server node07 192.168.1.71:80 check
# ... and many more such nodes ...
# these are the status back ends. This is so we can make requests
# direct to each node for the status console.
backend node06-status
server node06 192.168.1.70:80
backend node07-status
server node07 192.168.1.71:80
# ... and many more such back ends ...
Isso vai funcionar (eu acho), mas é realmente prolixo. Eu tenho que criar blocos idênticos de configurações três vezes para cada servidor de aplicativos no cluster. Isso se tornará incontrolável se eu estender isso além de 10 nós.
Existe uma maneira de configurar isso para que eu não precise separar as linhas de configuração por servidor de aplicativos?