Limit Req#
O módulo é usado para limitar a taxa de processamento de requisições por uma chave definida, em particular, a taxa de processamento de requisições vindas de um único endereço IP. A limitação é feita usando o método "leaky bucket". Padrão — http, server, location Define a zona de memória compartilhada e o tamanho máximo de rajada de requisições. Se a taxa de requisições exceder a taxa configurada para uma zona, seu processamento é atrasado de forma que as requisições sejam processadas a uma taxa definida. Requisições excessivas são atrasadas até que seu número exceda o tamanho máximo de rajada, caso em que a requisição é terminada com um erro. Por padrão, o tamanho máximo de rajada é igual a zero. Por exemplo, as diretivas permitem não mais que 1 requisição por segundo em média, com rajadas não excedendo 5 requisições. Se o atraso de requisições excessivas enquanto as requisições estão sendo limitadas não for desejado, o parâmetro O parâmetro Pode haver várias diretivas Essas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas Habilita o modo de execução a seco. Neste modo, a taxa de processamento de requisições não é limitada, porém, na zona de memória compartilhada, o número de requisições excessivas é contabilizado normalmente. Padrão http, server, location Define o nível de log desejado para casos quando o servidor se recusa a processar requisições devido ao excesso de taxa, ou atrasa o processamento de requisições. O nível de log para atrasos é um ponto menor que para recusas; por exemplo, se Define o código de status a ser retornado em resposta a requisições rejeitadas. Define parâmetros para uma zona de memória compartilhada que manterá estados para várias chaves. Em particular, o estado armazena o número atual de requisições excessivas. A chave pode conter texto, variáveis e sua combinação. Requisições com valor de chave vazio não são contabilizadas. Exemplo de uso: Aqui, os estados são mantidos em uma zona de 10 megabytes Um endereço IP do cliente serve como chave. Note que ao invés de O tamanho da variável Uma zona de um megabyte pode manter cerca de 16 mil estados de 64 bytes ou cerca de 8 mil estados de 128 bytes. Se o armazenamento da zona for esgotado, o estado usado menos recentemente é removido. Se mesmo após isso um novo estado não puder ser criado, a requisição é terminada com um erro. A mantém o resultado da limitação da taxa de processamento de requisições: Exemplo de Configuração#
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
Diretivas#
limit_req#
limit_req
zone=
name [burst=
number] [nodelay | delay=
number];limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5;
}
nodelay
deve ser usado:limit_req zone=one burst=5 nodelay;
delay
especifica um limite no qual requisições excessivas passam a ser atrasadas. O valor padrão é zero, ou seja, todas as requisições excessivas são atrasadas.limit_req
. Por exemplo, a seguinte configuração limitará a taxa de processamento de requisições vindas de um único endereço IP e, ao mesmo tempo, a taxa de processamento de requisições pelo servidor virtual:limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
server {
...
limit_req zone=perip burst=5 nodelay;
limit_req zone=perserver burst=10;
}
limit_req
definidas no nível atual.limit_req_dry_run#
limit_req_log_level#
limit_req_log_level
info
| notice
| warn
| error
;limit_req_log_level error;
limit_req_log_level notice
for especificado, atrasos são registrados com o nível info
.limit_req_status#
limit_req_zone#
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
one
, e uma taxa média de processamento de requisições para esta zona não pode exceder 1 requisição por segundo.$remote_addr
, a variável $binary_remote_addr
é usada aqui.$binary_remote_addr
é sempre 4 bytes para endereços IPv4 ou 16 bytes para endereços IPv6. O estado armazenado sempre ocupa 64 bytes em plataformas de 32 bits e 128 bytes em plataformas de 64 bits.rate
é especificada em requisições por segundo (r/s). Se uma taxa de menos de uma requisição por segundo for desejada, ela é especificada em requisições por minuto (r/m). Por exemplo, meia requisição por segundo é 30r/m.Variáveis Integradas#
$limit_req_status
#PASSED
,
DELAYED
, REJECTED
, DELAYED_DRY_RUN
, ou
REJECTED_DRY_RUN