Aller au contenu

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.

License NGINX

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
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 :

  1. Détection de bot — correspondance regex contre plus de 800 motifs de bots
  2. Client Hints — s'ils sont présents, utilisés pour la détection mobile/tablette/navigateur/OS
  3. Vérifications rapides de l'UA — correspondances rapides de sous-chaînes pour iPad, iPhone, PlayStation, etc.
  4. Motifs de dispositifs complets — plus de 2 000 motifs regex pour marque/modèle
  5. Heuristique de tablette Android — Android sans le jeton "Mobile" → tablette
  6. Fallback mobile — jeton "Mobile" → mobile
  7. Détection de navigateur — plus de 500 motifs avec capture de version
  8. Détection de moteur — Blink, Gecko, WebKit, etc.
  9. 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