Estou explorando o uso do HAProxy como um balanceador na frente de um conjunto de web apis que são executados no IIS.
- node1.myapp.mycompany.com
- node2.myapp.mycomapny.com
No momento, estamos usando os Cabeçalhos do Host para resolver corretamente o aplicativo da Web correto no IIS. Por exemplo, podemos ter otherapp.mycompany.com em execução no mesmo servidor / porta, mas usando o Host Headers, o IIS sabe qual deles servir.
Minha tentativa inicial no HAProxy me deixou com erros 404, porque eu não estava incluindo os cabeçalhos de host em minha solicitação e, portanto, o IIS estava exibindo o site padrão vinculado ao IP fornecido e não resolvendo pelo nome do host.
A correção me deixou com algo assim:
frontend localnodes
bind *:80
mode http
default_backend nodes
backend nodes
mode http
balance roundrobin
option forwardfor
reqirep ^Host: Host:\ node1.myapp.mycompany.com
server web01 node1.myapp.mycompany.com:80
Isso funciona muito bem para um único back-end, mas fico pensando em como incluir os cabeçalhos de host corretos, dependendo de qual back-end está atendendo a solicitação:
backend nodes
mode http
balance roundrobin
option forwardfor
reqirep ^Host: Host:\ node1.myapp.mycompany.com
server web01 node1.myapp.mycompany.com:80
server web02 node2.myapp.mycompany.com:80
O acima não funciona sempre que node2
é usado porque não resolve corretamente no IIS (o nó2, neste caso, está em um servidor diferente e, portanto, em um IP diferente. Na verdade, se estivessem em execução no mesmo servidor / ip Eu suspeito que o trabalho de solicitação "trabalho", mas todos eles seriam servidos pelo node1 pelo cabeçalho do host).
- É possível definir o host com base na URL do back-end usada para atender à solicitação?
- Nesse caso, isso implica que meu
check
s também precisa fornecer o cabeçalho de host correto com base no back-end, como isso seria feito?
Editar: Estou usando o HA-Proxy versão 1.7.9 2017/08/18
Deixe-me dar um pouco mais de fundo. Costumávamos ter apenas myapp.mycompany.com
servindo solicitações de API. Precisamos expandi-lo. Nossos clientes ainda chamarão myapp.mycompany.com
, mas isso apenas apontará para o HAProxy, que equilibrará isso para node1.myapp.mycompany.com
e node2.myapp.mycompany.com
. Nossas configurações atuais de servidor nos obrigam a vincular um único endereço IP em cada servidor, portanto, usamos cabeçalhos de host para resolver.