Zum Inhalt

device-type: Modul zur Geräteserkennung für NGINX

Erfordert den Pro-Plan (oder höher) des GetPageSpeed NGINX Extras Abonnements.

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und 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

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_device_type_module.so;

Dieses Dokument beschreibt nginx-module-device-type v1.0.1, veröffentlicht am 16. Februar 2026.


Hochleistungsfähige Geräteserkennung für NGINX — direkt am Edge.

License NGINX

Warum dieses Modul?

Die Geräteserkennung ist entscheidend für:

  • Adaptive Bereitstellung — mobile-optimierte Inhalte ohne Weiterleitungen bereitstellen
  • Cache-Segmentierung — zwischengespeicherte Inhalte nach Gerätetyp variieren
  • Bot-Management — Scraper blockieren, Crawler drosseln, Suchmaschinen erlauben
  • AI-Crawler-Kontrolle — GPTBot, ClaudeBot und andere AI-Trainingsbots identifizieren und verwalten
  • Analytics-Anreicherung — Gerätekontext an Backends übergeben

Traditionelle Lösungen erfordern externe API-Aufrufe, was Latenz und Kosten hinzufügt. Dieses Modul führt die Erkennung in-Prozess mit vorcompilierten Regex-Mustern durch — keine Netzwerk-Round-Trips, keine Gebühren pro Anfrage.

Funktionen

Funktion Beschreibung
22 NGINX-Variablen Gerätetyp, Browser, OS, Bot-Klassifizierung — alles als native Variablen
4.000+ Erkennungsmuster Umfassende Abdeckung, die von GetPageSpeed gepflegt wird
Client Hints Unterstützung Hochgenaue Erkennung mit modernen Browsern
AI-Crawler-Erkennung Identifizieren Sie GPTBot, ClaudeBot, Anthropic-AI, CCBot und 50+ AI-Bots
Bot-Kategorisierung Klassifizieren als search_engine, ai_crawler, crawler, monitoring, scraper
JSON-Ausgabe Vollständiges Erkennungsergebnis als eine einzige JSON-Variable
Null Konfiguration Modul laden, Variablen verwenden — keine Direktiven erforderlich
Pro-Anfrage-Caching Die Erkennung läuft einmal pro Anfrage, Ergebnisse werden im Modulkontext zwischengespeichert

Musterstatistiken

  • 800+ Bot-Muster mit Kategorie, Produzent und AI-Crawler-Flag
  • 500+ Browser-Muster mit Versionsextraktion und Engine-Erkennung
  • 300+ OS-Muster mit Versions- und Familienklassifizierung
  • 2.000+ Geräte-Muster zur Marken- und Modellerkennung

Schnellstart

1. Modul laden

load_module modules/ngx_http_device_type_module.so;

2. Variablen verwenden

server {
    # Unterschiedliche Inhalte nach Gerät bereitstellen
    location / {
        if ($is_mobile) {
            rewrite ^(.*)$ /m$1 last;
        }
    }

    # AI-Crawler blockieren
    location /content/ {
        if ($is_ai_crawler) {
            return 403;
        }
        proxy_pass http://backend;
    }

    # Debug-Endpunkt
    location = /device {
        default_type application/json;
        return 200 $device_json;
    }
}

Variablenreferenz

Gerätetyp

Variable Werte Beschreibung
$device_type mobile, tablet, desktop, tv, console, car, wearable, camera, peripheral, bot Primäre Klassifizierung
$is_mobile 1 / 0 Telefon oder nur mobiler Browser
$is_tablet 1 / 0 Tablet-Gerät
$is_desktop 1 / 0 Desktop oder Laptop
$is_bot 1 / 0 Bot oder Crawler
$is_tv 1 / 0 Smart TV
$is_console 1 / 0 Spielkonsole
$is_wearable 1 / 0 Tragbares Gerät

Gerätedetails

Variable Beispiel Beschreibung
$device_brand Apple, Samsung, Google Gerätehersteller
$device_model iPhone 15, Galaxy S24, Pixel 8 Gerätemodell

Browser

Variable Beispiel Beschreibung
$browser_name Chrome, Firefox, Safari Browsername
$browser_version 120.0.0.0 Vollständige Versionsnummer
$browser_family Chrome, Firefox, Safari Browserfamilie
$browser_engine Blink, Gecko, WebKit Rendering-Engine

Betriebssystem

Variable Beispiel Beschreibung
$os_name Windows, Android, iOS OS-Name
$os_version 14, 17.2, 11 OS-Version
$os_family Windows, Android, Unix, iOS, macOS OS-Familie

Bot-Klassifizierung

Variable Beispiel Beschreibung
$bot_name Googlebot, GPTBot, ClaudeBot Bot-Identifikator
$bot_category search_engine, ai_crawler, crawler Bot-Kategorie
$bot_producer Google, OpenAI, Anthropic Bot-Betreiber
$is_ai_crawler 1 / 0 AI-Trainings-/Suchcrawler

JSON-Ausgabe

Variable Beschreibung
$device_json Vollständiges Erkennungsergebnis als JSON

Beispiel 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
}

Bot-Erkennungs-JSON:

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

Anwendungsfälle

Adaptive Inhaltsbereitstellung

# Mobile-optimierte Seiten bereitstellen
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;
}

Cache-Schlüssel-Variation

# Cache nach Gerätetyp variieren
proxy_cache_key "$scheme$request_uri|$device_type";

# Oder nur mobil vs. desktop
proxy_cache_key "$scheme$request_uri|$is_mobile";

Bot-Management

# AI-Trainingscrawler blockieren
location / {
    if ($is_ai_crawler) {
        return 403 "AI-Crawler nicht erlaubt";
    }
}

# Scraper drosseln, Suchmaschinen erlauben
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;
}

Analytics-Header

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;
}

Debug-Endpunkt

location = /debug/device {
    default_type text/plain;
    return 200 "Typ: $device_type
Mobil: $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)
Gerät: $device_brand $device_model
";
}

Client Hints

Für verbesserte Erkennungsgenauigkeit mit Chromium-basierten Browsern, Client Hints bewerben:

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";

Das Modul verarbeitet diese Client Hints:

Header Verwendet für
Sec-CH-UA Browsermarke und -version
Sec-CH-UA-Mobile Mobiler Indikator (?1 = mobil)
Sec-CH-UA-Model Gerätemodell (Tablet/Telefon-Hinweise)
Sec-CH-UA-Platform OS-Name
Sec-CH-UA-Platform-Version OS-Version

Client Hints bieten genauere Informationen als die Analyse des User-Agent und sind die Zukunft der Geräteserkennung.

Erkennungspriorität

Das Modul bewertet Signale in dieser Reihenfolge:

  1. Bot-Erkennung — Regex-Abgleich gegen 800+ Bot-Muster
  2. Client Hints — wenn vorhanden, verwendet für mobile/Tablet/Browser/OS-Erkennung
  3. Schnelle UA-Prüfungen — schnelle Teilzeichenfolgenabgleiche für iPad, iPhone, PlayStation usw.
  4. Vollständige Gerätemuster — 2.000+ Regex-Muster für Marke/Modell
  5. Android-Tablet-Heuristik — Android ohne "Mobile"-Token → Tablet
  6. Mobile-Fallback — "Mobile"-Token → mobil
  7. Browser-Erkennung — 500+ Muster mit Versionsaufnahme
  8. Engine-Erkennung — Blink, Gecko, WebKit usw.
  9. OS-Erkennung — 300+ Muster mit Familienklassifizierung

Die Ergebnisse werden pro Anfrage im Modulkontext zwischengespeichert.

Vergleich mit Alternativen

Funktion Dieses Modul 51Degrees WURFL DeviceAtlas
In-Prozess-Erkennung ❌ (Cloud)
Keine Kosten pro Anfrage
AI-Crawler-Erkennung
Bot-Kategorisierung Eingeschränkt Eingeschränkt Eingeschränkt
Client Hints
JSON-Ausgabe
Dynamisches Modul N/A