HAProxy: limita as conexões simultâneas com base no campo de cabeçalho HTTP

2

Eu tento limitar o número de conexões simultâneas usando tabelas stick HAProxy baseadas nos campos de cabeçalho HTTP. Eu poderia encontrar muitos exemplos usando endereços IP, mas isso não funciona no meu caso. Nosso aplicativo difere a conta de usuário somente no campo de cabeçalho HTTP x-account e espera solicitações provenientes de vários IPs simultaneamente.

Neste ponto, não posso fornecer nenhuma mensagem de erro ou algo do tipo, já que não consegui entender a configuração até o momento. Portanto, esta é uma questão muito básica sobre o uso / configuração do HAProxy.

Pelo que entendi depois de ler a documentação do HAProxy:

Eu defino a tabela-pau da seguinte forma:

stick-table type string size 100m store conn_cur

Isso deve me fornecer uma tabela para armazenar meus campos de cabeçalho. Eu não adicionei a validade, pois na verdade não me importo muito e os valores serão altamente repetitivos de qualquer maneira. Também ee não espere muito mais do que 5K-10K entradas, ou seja, contas diferentes.

Até agora, a documentação foi bem clara, mas a partir daqui meus problemas começam. Eu acho que preciso de uma linha que diz ao HAProxy que ele deve associar o valor do campo de cabeçalho com a conexão e relatar que ele está sendo aberto e, eventualmente, fechado. Isso poderia ser algo assim?

stick store-request hdr(x-account) account_table

E que deve haver uma linha que negue / tarpits a solicitação se o número máximo de sessões para este usuário for excedido. Algo como isso, eu acho:

http-request tarpit if hdr(x-account) account_table gt 10

Pelo menos é o que eu esperaria, mas posso estar completamente errado. Como eu disse antes, não consegui encontrar nenhum exemplo usando as cordas em uma mesa. Se isso ajudar, posso fornecer a configuração completa do HAProxy, mas acho que não é relevante, pois isso é apenas parte de uma definição de front-end, certo?

Qualquer ajuda é apreciada.

Felicidades, Ralph

    
por Ralph 07.01.2015 / 19:57

0 respostas