device-type: Module de détection de dispositifs pour NGINX
Nécessite le plan Pro (ou supérieur) de l'abonnement GetPageSpeed NGINX Extras.
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_device_type_module.so;
Ce document décrit nginx-module-device-type v1.0.1 publié le 16 février 2026.
Détection de dispositifs haute performance pour NGINX — directement à la périphérie.
Pourquoi ce module ?
La détection de dispositifs est essentielle pour :
- Service adaptatif — servir des ressources optimisées pour mobile sans redirections
- Segmentation du cache — varier le contenu mis en cache par type de dispositif
- Gestion des bots — bloquer les scrapers, limiter le taux des crawlers, autoriser les moteurs de recherche
- Contrôle des crawlers AI — identifier et gérer GPTBot, ClaudeBot et d'autres bots d'entraînement AI
- Enrichissement des analyses — transmettre le contexte du dispositif aux backends
Les solutions traditionnelles nécessitent des appels API externes, ajoutant de la latence et des coûts. Ce module effectue la détection en processus en utilisant des motifs regex précompilés — pas de trajets réseau, pas de frais par requête.
Fonctionnalités
| Fonctionnalité | Description |
|---|---|
| 22 variables NGINX | Type de dispositif, navigateur, OS, classification des bots — toutes en tant que variables natives |
| Plus de 4 000 motifs de détection | Couverture complète maintenue par GetPageSpeed |
| Support des Client Hints | Détection de haute précision avec les navigateurs modernes |
| Détection des crawlers AI | Identifier GPTBot, ClaudeBot, Anthropic-AI, CCBot et plus de 50 bots AI |
| Catégorisation des bots | Classifier en tant que search_engine, ai_crawler, crawler, monitoring, scraper |
| Sortie JSON | Résultat de détection complet sous forme d'une seule variable JSON |
| Aucune configuration | Charger le module, utiliser les variables — aucune directive nécessaire |
| Mise en cache par requête | La détection s'exécute une fois par requête, les résultats sont mis en cache dans le contexte du module |
Statistiques des motifs
- Plus de 800 motifs de bots avec catégorie, producteur et indicateur de crawler AI
- Plus de 500 motifs de navigateurs avec extraction de version et détection de moteur
- Plus de 300 motifs d'OS avec classification de version et de famille
- Plus de 2 000 motifs de dispositifs pour la détection de marque et de modèle
Démarrage rapide
1. Charger le module
load_module modules/ngx_http_device_type_module.so;
2. Utiliser les variables
server {
# Servir un contenu différent par dispositif
location / {
if ($is_mobile) {
rewrite ^(.*)$ /m$1 last;
}
}
# Bloquer les crawlers AI
location /content/ {
if ($is_ai_crawler) {
return 403;
}
proxy_pass http://backend;
}
# Point de débogage
location = /device {
default_type application/json;
return 200 $device_json;
}
}
Référence des variables
Type de dispositif
| Variable | Valeurs | Description |
|---|---|---|
$device_type |
mobile, tablet, desktop, tv, console, car, wearable, camera, peripheral, bot |
Classification principale |
$is_mobile |
1 / 0 |
Téléphone ou navigateur uniquement mobile |
$is_tablet |
1 / 0 |
Dispositif tablette |
$is_desktop |
1 / 0 |
Bureau ou ordinateur portable |
$is_bot |
1 / 0 |
Bot ou crawler |
$is_tv |
1 / 0 |
Smart TV |
$is_console |
1 / 0 |
Console de jeu |
$is_wearable |
1 / 0 |
Dispositif portable |
Détails du dispositif
| Variable | Exemple | Description |
|---|---|---|
$device_brand |
Apple, Samsung, Google |
Fabricant du dispositif |
$device_model |
iPhone 15, Galaxy S24, Pixel 8 |
Modèle du dispositif |
Navigateur
| Variable | Exemple | Description |
|---|---|---|
$browser_name |
Chrome, Firefox, Safari |
Nom du navigateur |
$browser_version |
120.0.0.0 |
Chaîne de version complète |
$browser_family |
Chrome, Firefox, Safari |
Famille du navigateur |
$browser_engine |
Blink, Gecko, WebKit |
Moteur de rendu |
Système d'exploitation
| Variable | Exemple | Description |
|---|---|---|
$os_name |
Windows, Android, iOS |
Nom de l'OS |
$os_version |
14, 17.2, 11 |
Version de l'OS |
$os_family |
Windows, Android, Unix, iOS, macOS |
Famille de l'OS |
Classification des bots
| Variable | Exemple | Description |
|---|---|---|
$bot_name |
Googlebot, GPTBot, ClaudeBot |
Identifiant du bot |
$bot_category |
search_engine, ai_crawler, crawler |
Catégorie du bot |
$bot_producer |
Google, OpenAI, Anthropic |
Opérateur du bot |
$is_ai_crawler |
1 / 0 |
Crawler d'entraînement/recherche AI |
Sortie JSON
| Variable | Description |
|---|---|
$device_json |
Résultat de détection complet sous forme de JSON |
Exemple 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 détection 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}
}
Cas d'utilisation
Service de contenu adaptatif
# Servir des pages optimisées pour mobile
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;
}
Variation de clé de cache
# Varier le cache par type de dispositif
proxy_cache_key "$scheme$request_uri|$device_type";
# Ou juste mobile vs bureau
proxy_cache_key "$scheme$request_uri|$is_mobile";
Gestion des bots
# Bloquer les crawlers d'entraînement AI
location / {
if ($is_ai_crawler) {
return 403 "Crawlers AI non autorisés";
}
}
# Limiter le taux des scrapers, autoriser les moteurs de recherche
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;
}
En-têtes d'analyse
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;
}
Point de débogage
location = /debug/device {
default_type text/plain;
return 200 "Type: $device_type
Mobile: $is_mobile
Tablet: $is_tablet
Desktop: $is_desktop
Bot: $is_bot ($bot_name)
AI Crawler: $is_ai_crawler
Browser: $browser_name $browser_version
Engine: $browser_engine
OS: $os_name $os_version ($os_family)
Device: $device_brand $device_model
";
}
Client Hints
Pour améliorer la précision de la détection avec les navigateurs basés sur Chromium, annoncez les 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";
Le module traite ces Client Hints :
| En-tête | Utilisé pour |
|---|---|
Sec-CH-UA |
Marque et version du navigateur |
Sec-CH-UA-Mobile |
Indicateur mobile (?1 = mobile) |
Sec-CH-UA-Model |
Modèle de dispositif (indices tablette/téléphone) |
Sec-CH-UA-Platform |
Nom de l'OS |
Sec-CH-UA-Platform-Version |
Version de l'OS |
Les Client Hints fournissent des informations plus précises que l'analyse de l'User-Agent et représentent l'avenir de la détection de dispositifs.
Priorité de détection
Le module évalue les signaux dans cet ordre :
- Détection de bot — correspondance regex contre plus de 800 motifs de bots
- Client Hints — s'ils sont présents, utilisés pour la détection mobile/tablette/navigateur/OS
- Vérifications rapides de l'UA — correspondances rapides de sous-chaînes pour iPad, iPhone, PlayStation, etc.
- Motifs de dispositifs complets — plus de 2 000 motifs regex pour marque/modèle
- Heuristique de tablette Android — Android sans le jeton "Mobile" → tablette
- Fallback mobile — jeton "Mobile" → mobile
- Détection de navigateur — plus de 500 motifs avec capture de version
- Détection de moteur — Blink, Gecko, WebKit, etc.
- Détection d'OS — plus de 300 motifs avec classification de famille
Les résultats sont mis en cache par requête dans le contexte du module.
Comparaison avec les alternatives
| Fonctionnalité | Ce module | 51Degrees | WURFL | DeviceAtlas |
|---|---|---|---|---|
| Détection en processus | ✅ | ✅ | ✅ | ❌ (Cloud) |
| Aucun coût par requête | ✅ | ❌ | ❌ | ❌ |
| Détection des crawlers AI | ✅ | ❌ | ❌ | ❌ |
| Catégorisation des bots | ✅ | Limitée | Limitée | Limitée |
| Client Hints | ✅ | ✅ | ✅ | ✅ |
| Sortie JSON | ✅ | ❌ | ❌ | ❌ |
| Module dynamique | ✅ | ✅ | ✅ | N/A |