DEV Community

Cover image for Como bloqueei um bot abusivo (Scrapy) via User-Agent no NGINX
Marcos Vilela
Marcos Vilela

Posted on

Como bloqueei um bot abusivo (Scrapy) via User-Agent no NGINX

Durante um final de semana, fui alertado por múltiplos picos de CPU em nossos servidores web. Após investigar os logs de acesso, identifiquei um padrão claro: um bot usando o user-agent Scrapy/2.11.2 (+https://scrapy.org) estava fazendo scraping intenso em diversos sites hospedados.

Neste post, mostro como identifiquei o problema e bloqueei esse bot diretamente no NGINX.

Diagnóstico

Recebi 114 alertas do monitoramento, de uso excessivo de CPU.

Logs apontaram requisições contínuas com o user-agent do Scrapy.

Nenhum impacto direto em disponibilidade, mas o abuso estava consumindo recursos desnecessários.

Exemplo de log:

34.29.150.158 - - [01/Jun/2025:22:41:26 +0000] "GET /artigo HTTP/1.1" 200 73470 "https://site.com.br/" "Scrapy/2.11.2 (+https://scrapy.org)"
Enter fullscreen mode Exit fullscreen mode

Solução: bloquear o User-Agent no NGINX

A forma mais simples e direta: utilizar uma regra de if no NGINX para inspecionar o cabeçalho User-Agent.

Abra o arquivo de configuração de NGINX do site ou de algum arquivo de configuração que seja incluído nas configurações, pode também inserir num bloco server, nas configurações de NGINX do site:

sudo vim /etc/nginx/snippets/restrictions.conf
Enter fullscreen mode Exit fullscreen mode

Adicione a regra abaixo:

if ($http_user_agent ~* "Scrapy/.*\(\+https://scrapy\.org\)") {
    return 403;
}
Enter fullscreen mode Exit fullscreen mode

Essa regex garante que apenas o Scrapy com o padrão oficial da ferramenta seja bloqueado, evitando falsos positivos.

Inclua o restrictions.conf no seu server {}:

include /etc/nginx/snippets/restrictions.conf;
Enter fullscreen mode Exit fullscreen mode

Teste e recarregue o NGINX:

sudo nginx -t && sudo systemctl reload nginx
Enter fullscreen mode Exit fullscreen mode

Resultado

Após aplicar a regra, todas as requisições do bot passaram a ser negadas com status 403.

O gráfico do monitoramento estabilizou e os alertas de CPU pararam.
Bots legítimos respeitam regras de robots.txt. Scrapy pode ser facilmente configurado para ignorá-las, então bloquear o User-Agent é uma defesa válida.

Sempre monitore logs. Bots mudam padrões, então essa regra pode precisar de ajustes futuros.

Para cenários mais robustos, considere um WAF como Cloudflare, ModSecurity ou fail2ban com parsing de logs.

Bloquear não resolve tudo, mas reduz significativamente o ruído para os usuários legítimos.

Você já precisou lidar com bots abusivos? Conta aqui nos comentários!

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.