1001Ferramentas
🛑 Dev

Gerador de NGINX Rate Limit

Configura limit_req_zone e limit_req no NGINX para limitar requisições por IP. Inclui burst e nodelay configuráveis.

Limitar requisições no nginx sem derrubar quem é legítimo

O limite de taxa do nginx trabalha em duas partes que ficam em lugares diferentes do arquivo, e é justamente aí que a configuração costuma falhar. A diretiva que define a zona compartilhada vai no bloco http; a que aplica o limite vai no server ou no location. Definir a zona e esquecer de aplicá-la resulta em nenhum limite — sem erro nenhum.

Preencha o nome da zona, o tamanho da memória, a taxa e o burst e a página monta as duas linhas, cada uma com a indicação de onde entra. O tamanho da zona é memória compartilhada que guarda o estado por chave: um megabyte comporta na casa de dezesseis mil endereços, então dez megabytes cobrem folgadamente a maioria dos sites.

A parte que mais confunde é a dupla burst e nodelay. O nginx usa balde furado: a taxa é constante e o burst é o tanto de excedente que pode ficar na fila. Sem nodelay, as requisições em excesso são atrasadas até caberem na taxa — o cliente espera. Com nodelay, elas passam na hora, desde que caibam no burst. Para navegação de gente, nodelay costuma ser o certo, porque uma página dispara vários pedidos de uma vez e atrasá-los deixa o site lento sem necessidade.

Perguntas frequentes

Qual chave devo usar para limitar?
O padrão é o endereço do cliente em forma binária, que ocupa menos memória. Atrás de CDN ou balanceador, esse endereço é o do proxy e o limite viraria global — nesse caso é preciso usar a variável do cabeçalho de encaminhamento, e só depois de confiar nela por configuração de proxy real.
O que acontece quando o limite estoura?
O nginx responde 503 por padrão. Vale trocar para 429, que é o código correto para excesso de requisições, com a diretiva de status do limite — e, se possível, acrescentar um Retry-After para o cliente saber quando voltar.
Isso protege contra ataque de negação de serviço?
Contra abuso de um cliente só, ajuda bastante. Contra ataque distribuído, não: milhares de origens diferentes ficam abaixo do limite individual e o efeito somado passa. Para isso o instrumento é a camada de rede, antes do servidor de aplicação.

Ferramentas Relacionadas