Existe uma maneira de configurar o HAProxy para enviar tráfego com base em um cookie?

7

Ao configurar o HAProxy, gostaria de enviar tráfego para determinados servidores com base na presença de um cookie.

Por exemplo:

  1. Existe um servidor HAProxy e dois servidores da Web (serverA e serverB).
  2. Quando alguém faz login, um cookie é criado "loginCreds = user: company".
  3. Quando John, da CompanyA, entra, seu cookie é "loginCreds = John: CompanyA".
  4. O tráfego dele será direcionado para o servidorA.

Isso é possível e, em caso afirmativo, como você o configura?

    
por slm 17.10.2009 / 00:00

2 respostas

10

Sim, é possível, mas você precisará ajustar / testar essa configuração por conta própria. Deve ser algo como isto:

Observação : Isso só verifica se o cabeçalho "Cookie:" está definido como "CompanyA" ou "CompanyB", diferenciando maiúsculas e minúsculas. Você pode brincar com os valores e se você é bom com expressões regulares, você pode usar hdr_reg (Cookie).

frontend read_cookies
    bind    :80
    mode    http

    acl is_companya hdr(Cookie) CompanyA
    acl is_companyb hdr(Cookie) CompanyB

    use_backend company_a if is_companya
    use_backend company_b if is_companyb

    default_backend company_c

backend company_a
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web1 172.16.0.11:80 check

backend company_b
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web2 172.16.0.12:80 check

backend company_c
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web3 172.16.0.13:80 check
    
por 10.11.2009 / 19:58
1

Hmn, esse é um pedido atípico. Acho que você poderia fazer algo parecido com o comando "appsession" no HAProxy , mas eu não não conheço o algoritmo exato dele. Meu palpite é que você teria que perguntar nas listas HAProxy, ou olhar para o código fonte do HAProxy.

Você não poderia discriminar em algo "mais rico" do que um biscoito? Por exemplo, crie nomes de host "premium.company.com" e "standard.company.com" e direcione o tráfego com base no nome do host.

Outra ideia pode ser aprender como o próprio cookie do HAProxy para sessões adesivas é formatado (veja a seção "cookie" nos documentos). Se você definir um cookie com o mesmo nome e dados internos que o próprio HAProxy usa, então eu acho que o HAProxy roteará o pedido recebido como você quiser ...

    
por 17.10.2009 / 00:51