Pular para conteúdo

device-type: Módulo de detecção de dispositivos para NGINX

Requer o plano Pro (ou superior) da assinatura GetPageSpeed NGINX Extras.

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-device-type
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-device-type

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_device_type_module.so;

Este documento descreve nginx-module-device-type v1.0.1 lançado em 16 de fevereiro de 2026.


Detecção de dispositivos de alto desempenho para NGINX — diretamente na borda.

License NGINX

Por Que Este Módulo?

A detecção de dispositivos é crítica para:

  • Serviço adaptativo — sirva ativos otimizados para dispositivos móveis sem redirecionamentos
  • Segmentação de cache — varie o conteúdo em cache por tipo de dispositivo
  • Gerenciamento de bots — bloqueie scrapers, limite a taxa de crawlers, permita motores de busca
  • Controle de crawlers de IA — identifique e gerencie GPTBot, ClaudeBot e outros bots de treinamento de IA
  • Enriquecimento de análises — passe o contexto do dispositivo para os backends

Soluções tradicionais requerem chamadas de API externas, adicionando latência e custo. Este módulo realiza a detecção em processo usando padrões regex pré-compilados — sem idas e vindas de rede, sem taxas por solicitação.

Recursos

Recurso Descrição
22 variáveis NGINX Tipo de dispositivo, navegador, SO, classificação de bot — todas como variáveis nativas
Mais de 4.000 padrões de detecção Cobertura abrangente mantida pela GetPageSpeed
Suporte a Client Hints Detecção de alta precisão com navegadores modernos
Detecção de crawlers de IA Identifique GPTBot, ClaudeBot, Anthropic-AI, CCBot e mais de 50 bots de IA
Classificação de bots Classifique como search_engine, ai_crawler, crawler, monitoring, scraper
Saída JSON Resultado completo da detecção como uma única variável JSON
Zero configuração Carregue o módulo, use as variáveis — sem diretivas necessárias
Cache por solicitação A detecção é executada uma vez por solicitação, resultados armazenados em cache no contexto do módulo

Estatísticas de Padrões

  • Mais de 800 padrões de bots com categoria, produtor e sinalizador de crawler de IA
  • Mais de 500 padrões de navegadores com extração de versão e detecção de mecanismo
  • Mais de 300 padrões de SO com classificação de versão e família
  • Mais de 2.000 padrões de dispositivos para detecção de marca e modelo

Início Rápido

1. Carregue o Módulo

load_module modules/ngx_http_device_type_module.so;

2. Use as Variáveis

server {
    # Sirva conteúdo diferente por dispositivo
    location / {
        if ($is_mobile) {
            rewrite ^(.*)$ /m$1 last;
        }
    }

    # Bloqueie crawlers de IA
    location /content/ {
        if ($is_ai_crawler) {
            return 403;
        }
        proxy_pass http://backend;
    }

    # Endpoint de depuração
    location = /device {
        default_type application/json;
        return 200 $device_json;
    }
}

Referência de Variáveis

Tipo de Dispositivo

Variável Valores Descrição
$device_type mobile, tablet, desktop, tv, console, car, wearable, camera, peripheral, bot Classificação primária
$is_mobile 1 / 0 Telefone ou navegador apenas móvel
$is_tablet 1 / 0 Dispositivo tablet
$is_desktop 1 / 0 Desktop ou laptop
$is_bot 1 / 0 Bot ou crawler
$is_tv 1 / 0 Smart TV
$is_console 1 / 0 Console de jogos
$is_wearable 1 / 0 Dispositivo vestível

Detalhes do Dispositivo

Variável Exemplo Descrição
$device_brand Apple, Samsung, Google Fabricante do dispositivo
$device_model iPhone 15, Galaxy S24, Pixel 8 Modelo do dispositivo
Variável Exemplo Descrição
$browser_name Chrome, Firefox, Safari Nome do navegador
$browser_version 120.0.0.0 String completa da versão
$browser_family Chrome, Firefox, Safari Família do navegador
$browser_engine Blink, Gecko, WebKit Mecanismo de renderização

Sistema Operacional

Variável Exemplo Descrição
$os_name Windows, Android, iOS Nome do SO
$os_version 14, 17.2, 11 Versão do SO
$os_family Windows, Android, Unix, iOS, macOS Família do SO

Classificação de Bots

Variável Exemplo Descrição
$bot_name Googlebot, GPTBot, ClaudeBot Identificador do bot
$bot_category search_engine, ai_crawler, crawler Categoria do bot
$bot_producer Google, OpenAI, Anthropic Operador do bot
$is_ai_crawler 1 / 0 Crawler de treinamento/pesquisa de IA

Saída JSON

Variável Descrição
$device_json Resultado completo da detecção como JSON

Exemplo JSON:

{
  "type": "mobile",
  "browser": {"name": "Chrome", "version": "120.0", "engine": "Blink"},
  "os": {"name": "Android", "version": "14", "family": "Android"},
  "device": {"brand": "Google", "model": "Pixel 8"},
  "bot": null
}

JSON de detecção de bot:

{
  "type": "bot",
  "browser": {"name": "", "version": "", "engine": ""},
  "os": {"name": "", "version": "", "family": ""},
  "device": {"brand": "", "model": ""},
  "bot": {"name": "GPTBot", "category": "ai_crawler", "producer": "OpenAI", "is_ai": true}
}

Casos de Uso

Serviço de Conteúdo Adaptativo

# Sirva páginas otimizadas para dispositivos móveis
location / {
    set $variant "desktop";
    if ($is_mobile) { set $variant "mobile"; }
    if ($is_tablet) { set $variant "tablet"; }

    proxy_pass http://backend;
    proxy_set_header X-Device-Variant $variant;
}

Variação da Chave de Cache

# Varie o cache por tipo de dispositivo
proxy_cache_key "$scheme$request_uri|$device_type";

# Ou apenas móvel vs desktop
proxy_cache_key "$scheme$request_uri|$is_mobile";

Gerenciamento de Bots

# Bloqueie crawlers de treinamento de IA
location / {
    if ($is_ai_crawler) {
        return 403 "Crawlers de IA não permitidos";
    }
}

# Limite a taxa de scrapers, permita motores de busca
limit_req_zone $binary_remote_addr zone=scraper:10m rate=1r/s;

location / {
    if ($bot_category = "scraper") {
        limit_req zone=scraper;
    }
    proxy_pass http://backend;
}

Cabeçalhos de Análise

location /api/ {
    proxy_set_header X-Device-Type $device_type;
    proxy_set_header X-Device-Brand $device_brand;
    proxy_set_header X-Browser $browser_name;
    proxy_set_header X-OS $os_name;
    proxy_set_header X-Is-Bot $is_bot;
    proxy_pass http://backend;
}

Endpoint de Depuração

location = /debug/device {
    default_type text/plain;
    return 200 "Tipo: $device_type
Móvel: $is_mobile
Tablet: $is_tablet
Desktop: $is_desktop
Bot: $is_bot ($bot_name)
Crawler de IA: $is_ai_crawler
Navegador: $browser_name $browser_version
Mecanismo: $browser_engine
SO: $os_name $os_version ($os_family)
Dispositivo: $device_brand $device_model
";
}

Client Hints

Para melhorar a precisão da detecção com navegadores baseados em Chromium, anuncie Client Hints:

add_header Accept-CH "Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version";
add_header Critical-CH "Sec-CH-UA-Mobile";

O módulo processa esses Client Hints:

Cabeçalho Usado Para
Sec-CH-UA Marca e versão do navegador
Sec-CH-UA-Mobile Indicador móvel (?1 = móvel)
Sec-CH-UA-Model Modelo do dispositivo (dicas de tablet/telefone)
Sec-CH-UA-Platform Nome do SO
Sec-CH-UA-Platform-Version Versão do SO

Client Hints fornecem informações mais precisas do que a análise de User-Agent e são o futuro da detecção de dispositivos.

Prioridade de Detecção

O módulo avalia sinais nesta ordem:

  1. Detecção de bots — correspondência regex contra mais de 800 padrões de bots
  2. Client Hints — se presentes, usados para detecção de móvel/tablet/navegador/SO
  3. Verificações rápidas de UA — correspondências rápidas de substring para iPad, iPhone, PlayStation, etc.
  4. Padrões completos de dispositivos — mais de 2.000 padrões regex para marca/modelo
  5. Heurística de tablet Android — Android sem token "Mobile" → tablet
  6. Fallback móvel — token "Mobile" → móvel
  7. Detecção de navegador — mais de 500 padrões com captura de versão
  8. Detecção de mecanismo — Blink, Gecko, WebKit, etc.
  9. Detecção de SO — mais de 300 padrões com classificação de família

Os resultados são armazenados em cache por solicitação no contexto do módulo.

Comparação com Alternativas

Recurso Este Módulo 51Degrees WURFL DeviceAtlas
Detecção em processo ❌ (Nuvem)
Sem custo por solicitação
Detecção de crawlers de IA
Classificação de bots Limitada Limitada Limitada
Client Hints
Saída JSON
Módulo dinâmico N/A