Nginx limit_req_zone ignora o valor da taxa

1

Eu tenho um comportamento estranho minha configuração é algo como isto:

http {
    limit_req_zone $binary_remote_addr zone=nocachelimit:10m rate=120r/m;
}
...
location "/api" {
    {
        limit_req zone=nocachelimit burst=20;
    }
}

Independentemente de quais valores eu coloquei na taxa, eu até tentei 1000r / s Continuo recebendo entradas de registro para usuários "normais" que dizem:

 [warn] 16526#0: *4661 delaying request, excess: 1.000, by zone "nocachelimit"

O típico usecase é um Pageload que não se enquadra na zona + 4-5 pedidos Ajax que devem ser limitados à zona.

Qual poderia ser a causa desse tipo de comportamento?

    
por gries 05.02.2016 / 10:54

1 resposta

1

A taxa determina a rapidez com que as solicitações são processadas. Se você definir a taxa para 120r / m, isso significa que 1 solicitação será processada a cada 0,5 segundo.

Se você receber 5 solicitações de uma só vez, isso não significa que todas elas passarão. Eles serão enfileirados (até o tamanho da sua explosão) e processados sequencialmente, 1 a cada 0,5 segundo.

Você está recebendo esse aviso porque as coisas estão entrando na fila e ficando atrasadas. Isso não significa que eles estão sendo rejeitados.

Se você não quiser que as coisas fiquem atrasadas, use o parâmetro nodelay:

location "/api" {
  limit_req zone=nocachelimit burst=20 nodelay;
}

Para mais detalhes sobre como isso funciona, consulte o link

    
por 18.10.2017 / 02:29