A limitação da taxa de requisições do Nginx é um recurso integrado que controla quantas requisições HTTP um cliente pode fazer em determinado período. Ela pode reduzir o tráfego abusivo direcionado a APIs, páginas de login e aplicações que consomem muitos recursos, sem exigir software adicional.
Neste guia, você configurará limites de requisições no Nginx, fará testes com segurança e ativará a proteção em um servidor Ubuntu.
Como funciona a limitação da taxa de requisições do Nginx?
O Nginx usa o módulo limit_req para monitorar as requisições recebidas, geralmente pelo endereço IP do cliente.
Por exemplo, você pode configurar um limite médio de cinco requisições por segundo e, ao mesmo tempo, permitir picos curtos de tráfego. As requisições que excederem o pico permitido poderão ser rejeitadas.
Isso ajuda a evitar que requisições excessivas sobrecarreguem sua aplicação.
Observação: A limitação da taxa de requisições ajuda a mitigar certos ataques de inundação HTTP na camada 7. Ela não consegue impedir grandes ataques DDoS na camada de rede que saturem sua conexão.

Pré-requisitos
Você precisará de um servidor Ubuntu com o Nginx instalado, acesso SSH com privilégios sudo e um site ou aplicação existente.
Se você estiver configurando o Nginx pela primeira vez, siga nosso tutorial de proxy reverso com Nginx.
Antes de fazer alterações, crie um backup da configuração atual do seu site.
Etapa 1: defina uma zona de limitação da taxa de requisições
Conecte-se ao seu servidor por SSH.
Em uma instalação padrão do Nginx no Ubuntu, crie um novo arquivo de configuração:
sudo nano /etc/nginx/conf.d/rate-limit.conf
Adicione:
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
Essa configuração usa o endereço IP do cliente para monitorar as requisições, aloca 10 MB para os dados de monitoramento e define um limite médio de cinco requisições por segundo por IP.
A diretiva limit_req_zone deve ser colocada no contexto http do Nginx. A configuração padrão do Ubuntu inclui os arquivos conf.d nesse contexto.
Salve o arquivo.
Etapa 2: ative a limitação da taxa de requisições para seu site
Abra a configuração atual do seu site no Nginx:
sudo nano /etc/nginx/sites-available/app.example.com
Substitua o nome do arquivo pelo nome do seu arquivo de configuração.
Para uma aplicação HTTP em execução na porta 3000, um endpoint de API protegido poderia ter esta configuração:
location /api/ {
limit_req zone=perip burst=10 nodelay;
limit_req_status 429;
limit_req_dry_run on;
proxy_pass http://127.0.0.1:3000;
}
Veja o que fazem as principais diretivas:
limit_req: aplica o limite definido anteriormente.burst=10: permite um pico curto de requisições acima do limite médio.nodelay: processa imediatamente as requisições permitidas durante o pico.limit_req_status 429: retorna HTTP 429 quando as requisições são rejeitadas.limit_req_dry_run on: registra requisições excessivas sem bloqueá-las.
Importante: Adicione essas diretivas de limitação da taxa de requisições ao bloco location existente que corresponde ao endpoint. Não crie blocos de localização duplicados nem substitua a configuração atual do seu backend.
Os valores apresentados são exemplos. Escolha os limites com base nos padrões normais de requisições da sua aplicação.
Etapa 3: valide a configuração do Nginx
Verifique a configuração:
sudo nginx -t
Se o teste for bem-sucedido, recarregue o Nginx:
sudo systemctl reload nginx
Se aparecer um erro, corrija-o antes de recarregar.
Etapa 4: teste o limite de requisições
Como o modo de simulação está ativado, as requisições ainda não serão rejeitadas.
Monitore o log de erros do Nginx:
sudo tail -f /var/log/nginx/error.log
Em outro terminal, envie um pequeno pico de requisições de teste a um endpoint sob seu controle:
for i in $(seq 1 15); do
curl -s -o /dev/null -w "%{http_code}\n" \
https://app.example.com/api/health
done
Substitua a URL por um endpoint funcional da sua aplicação de teste ou homologação.
Se as requisições excederem o limite, o Nginx deverá registrar mensagens contendo limiting requests, dry run no log de erros.
Sua aplicação deverá continuar retornando as respostas normais, pois o bloqueio não está ativado.
Etapa 5: ative a limitação da taxa de requisições
Depois de analisar os resultados e confirmar que os limites são adequados, remova esta diretiva do bloco de localização protegido:
limit_req_dry_run on;
Valide a configuração e recarregue o Nginx novamente:
sudo nginx -t
sudo systemctl reload nginx
As requisições excessivas agora poderão receber HTTP 429 Too Many Requests.
Repita um teste controlado e verifique os códigos de resposta. Os resultados exatos dependem do intervalo entre as requisições e dos limites configurados.
Como desfazer as alterações
Se usuários legítimos forem afetados, restaure:
limit_req_dry_run on;
Valide a configuração e recarregue o Nginx. Isso retorna a configuração ao modo de monitoramento, sem rejeitar requisições.
Depois, você pode ajustar os limites com base no tráfego real.
Importante: Nginx atrás da Cloudflare ou de outra CDN
Quando o Nginx está atrás de um proxy reverso, o IP do cliente visível para ele pode pertencer ao proxy, e não ao visitante original.
Aplicar limites por IP sem corrigir isso pode fazer com que usuários distintos sejam agrupados.
Configure o tratamento de IPs de clientes confiáveis usando o módulo Real IP do Nginx e os intervalos de IP documentados pelo seu provedor de proxy antes de aplicar limites por cliente.
Nunca confie em cabeçalhos de IP fornecidos por visitantes sem validação.
A limitação da taxa de requisições do Nginx substitui a proteção contra DDoS?
Não. O Nginx pode limitar as requisições HTTP excessivas que chegam à sua aplicação, mas não consegue filtrar o tráfego que já saturou a conexão de rede upstream do seu servidor.
Para uma proteção mais ampla, combine controles no nível da aplicação com medidas de mitigação no nível da hospedagem.
Nosso guia de proteção contra DDoS explica como as defesas no nível da rede e da aplicação se complementam.
Perguntas frequentes
Sim. O Nginx Open Source inclui o módulo limit_req.
Sim. Configurações excessivamente restritivas podem rejeitar requisições legítimas, especialmente quando vários usuários compartilham um mesmo endereço IP. Teste no modo de simulação antes de ativar o bloqueio.
Sim. Ela é especialmente útil para controlar requisições excessivas a endpoints de API e outras rotas de aplicações que consomem muitos recursos.
Conclusão
O Nginx oferece limitação integrada da taxa de requisições, que pode ajudar a reduzir o tráfego HTTP abusivo sem exigir software adicional.
Configure o limite de requisições, teste-o no modo de simulação e ative o bloqueio somente depois de analisar os resultados.
Para uma proteção abrangente do servidor, use a limitação da taxa de requisições junto com medidas adequadas de mitigação de DDoS na rede upstream.