device-type: Módulo de detección de dispositivos para NGINX
Requiere el plan Pro (o superior) de la suscripción GetPageSpeed NGINX Extras.
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_device_type_module.so;
Este documento describe nginx-module-device-type v1.0.1 lanzado el 16 de febrero de 2026.
Detección de dispositivos de alto rendimiento para NGINX — directamente en el borde.
¿Por qué este módulo?
La detección de dispositivos es crítica para:
- Servicio adaptativo — servir activos optimizados para móviles sin redirecciones
- Segmentación de caché — variar el contenido en caché según el tipo de dispositivo
- Gestión de bots — bloquear raspadores, limitar la tasa de rastreadores, permitir motores de búsqueda
- Control de rastreadores de IA — identificar y gestionar GPTBot, ClaudeBot y otros bots de entrenamiento de IA
- Enriquecimiento de análisis — pasar el contexto del dispositivo a los backends
Las soluciones tradicionales requieren llamadas a API externas, añadiendo latencia y costo. Este módulo realiza la detección en proceso utilizando patrones regex precompilados — sin viajes de red, sin tarifas por solicitud.
Características
| Característica | Descripción |
|---|---|
| 22 variables de NGINX | Tipo de dispositivo, navegador, SO, clasificación de bots — todo como variables nativas |
| Más de 4,000 patrones de detección | Cobertura integral mantenida por GetPageSpeed |
| Soporte para Client Hints | Detección de alta precisión con navegadores modernos |
| Detección de rastreadores de IA | Identificar GPTBot, ClaudeBot, Anthropic-AI, CCBot y más de 50 bots de IA |
| Clasificación de bots | Clasificar como search_engine, ai_crawler, crawler, monitoring, scraper |
| Salida en JSON | Resultado completo de detección como una única variable JSON |
| Cero configuración | Carga el módulo, usa las variables — no se necesitan directivas |
| Caché por solicitud | La detección se ejecuta una vez por solicitud, resultados almacenados en el contexto del módulo |
Estadísticas de Patrones
- Más de 800 patrones de bots con categoría, productor y bandera de rastreador de IA
- Más de 500 patrones de navegadores con extracción de versión y detección de motor
- Más de 300 patrones de SO con clasificación de versión y familia
- Más de 2,000 patrones de dispositivos para detección de marca y modelo
Inicio Rápido
1. Cargar el Módulo
load_module modules/ngx_http_device_type_module.so;
2. Usar las Variables
server {
# Servir contenido diferente según el dispositivo
location / {
if ($is_mobile) {
rewrite ^(.*)$ /m$1 last;
}
}
# Bloquear rastreadores de IA
location /content/ {
if ($is_ai_crawler) {
return 403;
}
proxy_pass http://backend;
}
# Punto final de depuración
location = /device {
default_type application/json;
return 200 $device_json;
}
}
Referencia de Variables
Tipo de Dispositivo
| Variable | Valores | Descripción |
|---|---|---|
$device_type |
mobile, tablet, desktop, tv, console, car, wearable, camera, peripheral, bot |
Clasificación primaria |
$is_mobile |
1 / 0 |
Teléfono o navegador solo para móviles |
$is_tablet |
1 / 0 |
Dispositivo tablet |
$is_desktop |
1 / 0 |
Escritorio o portátil |
$is_bot |
1 / 0 |
Bot o rastreador |
$is_tv |
1 / 0 |
Smart TV |
$is_console |
1 / 0 |
Consola de juegos |
$is_wearable |
1 / 0 |
Dispositivo portátil |
Detalles del Dispositivo
| Variable | Ejemplo | Descripción |
|---|---|---|
$device_brand |
Apple, Samsung, Google |
Fabricante del dispositivo |
$device_model |
iPhone 15, Galaxy S24, Pixel 8 |
Modelo del dispositivo |
Navegador
| Variable | Ejemplo | Descripción |
|---|---|---|
$browser_name |
Chrome, Firefox, Safari |
Nombre del navegador |
$browser_version |
120.0.0.0 |
Cadena de versión completa |
$browser_family |
Chrome, Firefox, Safari |
Familia del navegador |
$browser_engine |
Blink, Gecko, WebKit |
Motor de renderizado |
Sistema Operativo
| Variable | Ejemplo | Descripción |
|---|---|---|
$os_name |
Windows, Android, iOS |
Nombre del SO |
$os_version |
14, 17.2, 11 |
Versión del SO |
$os_family |
Windows, Android, Unix, iOS, macOS |
Familia del SO |
Clasificación de Bots
| Variable | Ejemplo | Descripción |
|---|---|---|
$bot_name |
Googlebot, GPTBot, ClaudeBot |
Identificador del bot |
$bot_category |
search_engine, ai_crawler, crawler |
Categoría del bot |
$bot_producer |
Google, OpenAI, Anthropic |
Operador del bot |
$is_ai_crawler |
1 / 0 |
Rastreador de IA de entrenamiento/búsqueda |
Salida en JSON
| Variable | Descripción |
|---|---|
$device_json |
Resultado completo de detección como JSON |
Ejemplo 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 detección de bots:
{
"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
Servicio de Contenido Adaptativo
# Servir páginas optimizadas para móviles
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;
}
Variación de Clave de Caché
# Variar caché por tipo de dispositivo
proxy_cache_key "$scheme$request_uri|$device_type";
# O solo móvil vs escritorio
proxy_cache_key "$scheme$request_uri|$is_mobile";
Gestión de Bots
# Bloquear rastreadores de entrenamiento de IA
location / {
if ($is_ai_crawler) {
return 403 "Rastreadores de IA no permitidos";
}
}
# Limitar la tasa de raspadores, permitir motores de búsqueda
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;
}
Encabezados de Análisis
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;
}
Punto Final de Depuración
location = /debug/device {
default_type text/plain;
return 200 "Tipo: $device_type
Móvil: $is_mobile
Tablet: $is_tablet
Escritorio: $is_desktop
Bot: $is_bot ($bot_name)
Rastreador de IA: $is_ai_crawler
Navegador: $browser_name $browser_version
Motor: $browser_engine
SO: $os_name $os_version ($os_family)
Dispositivo: $device_brand $device_model
";
}
Client Hints
Para mejorar la precisión de detección con navegadores basados en Chromium, publicita 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";
El módulo procesa estos Client Hints:
| Encabezado | Usado Para |
|---|---|
Sec-CH-UA |
Marca y versión del navegador |
Sec-CH-UA-Mobile |
Indicador móvil (?1 = móvil) |
Sec-CH-UA-Model |
Modelo del dispositivo (hints de tablet/teléfono) |
Sec-CH-UA-Platform |
Nombre del SO |
Sec-CH-UA-Platform-Version |
Versión del SO |
Client Hints proporcionan información más precisa que el análisis de User-Agent y son el futuro de la detección de dispositivos.
Prioridad de Detección
El módulo evalúa señales en este orden:
- Detección de bots — coincidencia regex contra más de 800 patrones de bots
- Client Hints — si están presentes, se utilizan para detección de móvil/tablet/navegador/SO
- Comprobaciones rápidas de UA — coincidencias rápidas de subcadenas para iPad, iPhone, PlayStation, etc.
- Patrones completos de dispositivos — más de 2,000 patrones regex para marca/modelo
- Heurística de tablet Android — Android sin el token "Mobile" → tablet
- Fallback móvil — token "Mobile" → móvil
- Detección de navegador — más de 500 patrones con captura de versión
- Detección de motor — Blink, Gecko, WebKit, etc.
- Detección de SO — más de 300 patrones con clasificación de familia
Los resultados se almacenan en caché por solicitud en el contexto del módulo.
Comparación con Alternativas
| Característica | Este Módulo | 51Degrees | WURFL | DeviceAtlas |
|---|---|---|---|---|
| Detección en proceso | ✅ | ✅ | ✅ | ❌ (Nube) |
| Sin costo por solicitud | ✅ | ❌ | ❌ | ❌ |
| Detección de rastreadores de IA | ✅ | ❌ | ❌ | ❌ |
| Clasificación de bots | ✅ | Limitada | Limitada | Limitada |
| Client Hints | ✅ | ✅ | ✅ | ✅ |
| Salida en JSON | ✅ | ❌ | ❌ | ❌ |
| Módulo dinámico | ✅ | ✅ | ✅ | N/A |