Limitação de taxa Nginx, usando múltiplas regras de taxa

Limitação de taxa Nginx, usando múltiplas regras de taxa

Usando a limitação de taxa nginx, usando esta regra como exemplo:

limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;

Isso definirá 30 solicitações por minuto. No entanto, e se eu quisesse empilhar uma segunda regra, então a lógica seria "30 solicitações por minuto ou 1 solicitação por segundo. O que ocorrer primeiro"

A razão para isso é que ainda queremos um limite de 30/min, mas há algumas tentativas estranhas de vermos um spam de 10 solicitações em um período de 1 a 2 segundos. Isso causa alguns problemas quando as solicitações chegam tão rápido.Portanto, gostaríamos de limitar os usuários a 1 solicitação por segundo E um limite de 30 por minuto.

Eu li a referência do documento, mas não vi muito sobre o empilhamento de regras de taxas diferentes.

Isso é possível? Se sim, qual seria a sintaxe?

Responder1

É perfeitamente válido aplicar múltiplas zonas ao mesmo bloco.Você também pode criar diversas zonas que armazenam solicitações para a mesma chave (normalmentealgum prefixo do endereço IP do cliente). Custa apenas processamento e memória mínimos.

O seguinte limitará os usuários, identificados pelo seu endereço de rede, tanto em intervalos de segundos quanto de minutos - e permitirá que eles excedam temporariamente o limite definido por curtos períodos.rajadas. Você deseja permitir isso, pois fará com que seu site pareça menos corrompido para usuários com dispositivos de entrada e/ou acesso à rede não confiáveis ​​- eles podem emitir a mesma solicitação duas vezes:

map $remote_addr $request_limiting_zone_key {
    # [..]
}
limit_req_zone $request_limiting_zone_key zone=request_limit_search_second:10m rate=1r/s;
limit_req_zone $request_limiting_zone_key zone=request_limit_search_minute:10m rate=30r/m;

 # [..]

location /search {
    limit_req zone=request_limit_search_second burst=3;
    limit_req zone=request_limit_search_minute burst=3;
}

Dito isto, se o seu servidor web não consegue lidar com uma pequena quantidade de solicitações de pesquisa, talvez você precise descarregar seu mecanismo de pesquisa para outra máquina ou aplicar um tipo diferente de limite de taxa.Você precisa de uma margem significativa entre o uso humano típico e o uso que excede a capacidade da sua máquinapara continuar. Caso contrário, você poderá não encontrar um valor seguro entre irritar usuários legítimos e não restringir o uso abusivo/bot.

informação relacionada