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.
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:
- Bot-Erkennung — Regex-Abgleich gegen 800+ Bot-Muster
- Client Hints — wenn vorhanden, verwendet für mobile/Tablet/Browser/OS-Erkennung
- Schnelle UA-Prüfungen — schnelle Teilzeichenfolgenabgleiche für iPad, iPhone, PlayStation usw.
- Vollständige Gerätemuster — 2.000+ Regex-Muster für Marke/Modell
- Android-Tablet-Heuristik — Android ohne "Mobile"-Token → Tablet
- Mobile-Fallback — "Mobile"-Token → mobil
- Browser-Erkennung — 500+ Muster mit Versionsaufnahme
- Engine-Erkennung — Blink, Gecko, WebKit usw.
- 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 |