Haproxy http-buffer-request não está funcionando

2

Não consigo obter a opção de solicitação de buffer HTTP da Haproxys trabalhando. Estou usando o Haproxy 1.6.5. Esta é minha configuração:

global
  maxconn 20000
  debug

defaults HTTP
  mode  http
  option  http-buffer-request  # buffer the whole request before dispatching it to the backend
  timeout connect  5s
  timeout client  50s
  timeout server  50s

frontend http
  bind 127.0.0.1:8123
  use_backend api.radioadmin_backend if { hdr(host) -i api.radioadmin.local:8123 }
  use_backend radioadmin_backend if { hdr(host) -i radioadmin.local:8123 }

backend api.radioadmin_backend
  mode  http
  server api.radioadmin3000 127.0.0.1:3000 check

backend radioadmin_backend
  mode  http
  server radioadmin3001 127.0.0.1:3001 check

No entanto, a solicitação não é armazenada em buffer no Haproxy, mas enviada diretamente para o aplicativo:

Estou executando um aplicativo Ruby com o Unicorn. Os trabalhadores do Unicorn são mortos, se demorar mais de 10 segundos para processar uma solicitação. Estou fazendo upload de um arquivo com o Chrome e limito a largura de banda nas ferramentas de desenvolvimento. Eu esperava que a Haproxy armazenasse o pedido POST em buffer até que ele estivesse completo e só então enviasse para o aplicativo Ruby. Mas isso não acontece. Eu não tenho ideia do que estou fazendo errado. Qualquer ajuda é muito apreciada.

    
por Niko 23.06.2016 / 16:10

1 resposta

2

tldr; Não faz. Use o NGinX.

Enquanto isso, recebi uma resposta da lista de discussão da Haproxy . Obrigado, Holger Apenas pela resposta.

(Meta: Eu não tinha certeza se a lista de discussão ainda está funcionando porque recebi erros ao postar na lista.)

Se eu tivesse lido atentamente a documentação, talvez essa frase não tenha escorregado da minha atenção:

This option placed in a frontend or backend forces the HTTP processing to wait until either the whole body is received, or the request buffer is full, or the first chunk is complete in case of chunked encoding.

Isso simplesmente significa que a Haproxy nunca fará buffer de grandes bodys de upload. O conselho na lista de discussão era usar o NGinX para isso.

Ainda não entendo como a Haproxy pode protege contra ataques POST lentos . Eu acho que um invasor simplesmente diminuiria a taxa de dados após o primeiro bloco. Mas essa discussão está além dessa questão.

    
por 24.06.2016 / 11:57

Tags