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.
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 |
Navegador
| 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:
- Detecção de bots — correspondência regex contra mais de 800 padrões de bots
- Client Hints — se presentes, usados para detecção de móvel/tablet/navegador/SO
- Verificações rápidas de UA — correspondências rápidas de substring para iPad, iPhone, PlayStation, etc.
- Padrões completos de dispositivos — mais de 2.000 padrões regex para marca/modelo
- Heurística de tablet Android — Android sem token "Mobile" → tablet
- Fallback móvel — token "Mobile" → móvel
- Detecção de navegador — mais de 500 padrões com captura de versão
- Detecção de mecanismo — Blink, Gecko, WebKit, etc.
- 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 |