Перейти к содержанию

device-type: Модуль обнаружения устройств для NGINX

Требуется план Pro (или выше) подписки GetPageSpeed NGINX Extras.

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

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

Активируйте модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_device_type_module.so;

Этот документ описывает nginx-module-device-type v1.0.0, выпущенный 15 февраля 2026 года.


Высокопроизводительное обнаружение устройств для NGINX — непосредственно на краю.

License NGINX

Почему этот модуль?

Обнаружение устройств критически важно для:

  • Адаптивного обслуживания — предоставление мобильных активов без перенаправлений
  • Сегментации кэша — изменение кэшированного контента в зависимости от типа устройства
  • Управления ботами — блокировка сканеров, ограничение скорости для краулеров, разрешение поисковым системам
  • Контроля AI-краулеров — идентификация и управление GPTBot, ClaudeBot и другими ботами для обучения AI
  • Увеличения аналитики — передача контекста устройства на бэкенды

Традиционные решения требуют внешних API-вызовов, что добавляет задержку и стоимость. Этот модуль выполняет обнаружение в процессе с использованием предварительно скомпилированных регулярных выражений — без сетевых запросов, без платы за каждый запрос.

Функции

Функция Описание
22 переменные NGINX Тип устройства, браузер, ОС, классификация ботов — все в виде нативных переменных
4,000+ паттернов обнаружения Обширное покрытие, поддерживаемое GetPageSpeed
Поддержка Client Hints Высокая точность обнаружения с современными браузерами
Обнаружение AI-краулеров Идентификация GPTBot, ClaudeBot, Anthropic-AI, CCBot и 50+ AI-ботов
Категоризация ботов Классификация как search_engine, ai_crawler, crawler, monitoring, scraper
JSON-вывод Полный результат обнаружения в виде одной JSON-переменной
Нулевая конфигурация Загрузите модуль, используйте переменные — директивы не нужны
Кэширование на уровне запроса Обнаружение выполняется один раз на запрос, результаты кэшируются в контексте модуля

Статистика паттернов

  • 800+ паттернов ботов с категорией, производителем и флагом AI-краулера
  • 500+ паттернов браузеров с извлечением версии и обнаружением движка
  • 300+ паттернов ОС с классификацией версии и семейства
  • 2,000+ паттернов устройств для обнаружения бренда и модели

Быстрый старт

1. Загрузите модуль

load_module modules/ngx_http_device_type_module.so;

2. Используйте переменные

server {
    # Обслуживание различного контента в зависимости от устройства
    location / {
        if ($is_mobile) {
            rewrite ^(.*)$ /m$1 last;
        }
    }

    # Блокировка AI-краулеров
    location /content/ {
        if ($is_ai_crawler) {
            return 403;
        }
        proxy_pass http://backend;
    }

    # Точка отладки
    location = /device {
        default_type application/json;
        return 200 $device_json;
    }
}

Справочник переменных

Тип устройства

Переменная Значения Описание
$device_type mobile, tablet, desktop, tv, console, car, wearable, camera, peripheral, bot Основная классификация
$is_mobile 1 / 0 Телефон или мобильный браузер
$is_tablet 1 / 0 Планшет
$is_desktop 1 / 0 Настольный компьютер или ноутбук
$is_bot 1 / 0 Бот или краулер
$is_tv 1 / 0 Смарт ТВ
$is_console 1 / 0 Игровая консоль
$is_wearable 1 / 0 Носимое устройство

Подробности устройства

Переменная Пример Описание
$device_brand Apple, Samsung, Google Производитель устройства
$device_model iPhone 15, Galaxy S24, Pixel 8 Модель устройства

Браузер

Переменная Пример Описание
$browser_name Chrome, Firefox, Safari Название браузера
$browser_version 120.0.0.0 Полная строка версии
$browser_family Chrome, Firefox, Safari Семейство браузера
$browser_engine Blink, Gecko, WebKit Движок рендеринга

Операционная система

Переменная Пример Описание
$os_name Windows, Android, iOS Название ОС
$os_version 14, 17.2, 11 Версия ОС
$os_family Windows, Android, Unix, iOS, macOS Семейство ОС

Классификация ботов

Переменная Пример Описание
$bot_name Googlebot, GPTBot, ClaudeBot Идентификатор бота
$bot_category search_engine, ai_crawler, crawler Категория бота
$bot_producer Google, OpenAI, Anthropic Оператор бота
$is_ai_crawler 1 / 0 AI-краулер для обучения/поиска

JSON-вывод

Переменная Описание
$device_json Полный результат обнаружения в формате JSON

Пример 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 для обнаружения ботов:

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

Сценарии использования

Адаптивное обслуживание контента

# Обслуживание страниц, оптимизированных для мобильных устройств
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;
}

Вариация ключа кэша

# Изменение кэша в зависимости от типа устройства
proxy_cache_key "$scheme$request_uri|$device_type";

# Или просто мобильный против настольного
proxy_cache_key "$scheme$request_uri|$is_mobile";

Управление ботами

# Блокировка AI-краулеров для обучения
location / {
    if ($is_ai_crawler) {
        return 403 "AI-краулеры не разрешены";
    }
}

# Ограничение скорости для сканеров, разрешение поисковым системам
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;
}

Заголовки аналитики

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

Точка отладки

location = /debug/device {
    default_type text/plain;
    return 200 "Тип: $device_type
Мобильный: $is_mobile
Планшет: $is_tablet
Настольный: $is_desktop
Бот: $is_bot ($bot_name)
AI-краулер: $is_ai_crawler
Браузер: $browser_name $browser_version
Движок: $browser_engine
ОС: $os_name $os_version ($os_family)
Устройство: $device_brand $device_model
";
}

Client Hints

Для повышения точности обнаружения с браузерами на основе Chromium, рекламируйте 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";

Модуль обрабатывает эти Client Hints:

Заголовок Используется для
Sec-CH-UA Бренд и версия браузера
Sec-CH-UA-Mobile Индикатор мобильного устройства (?1 = мобильный)
Sec-CH-UA-Model Модель устройства (подсказки для планшетов/телефонов)
Sec-CH-UA-Platform Название ОС
Sec-CH-UA-Platform-Version Версия ОС

Client Hints предоставляют более точную информацию, чем парсинг User-Agent, и являются будущим обнаружения устройств.

Приоритет обнаружения

Модуль оценивает сигналы в следующем порядке:

  1. Обнаружение ботов — совпадение по регулярным выражениям с 800+ паттернами ботов
  2. Client Hints — если присутствуют, используются для обнаружения мобильных устройств/планшетов/браузеров/ОС
  3. Быстрая проверка UA — быстрые совпадения подстрок для iPad, iPhone, PlayStation и т.д.
  4. Полные паттерны устройств — 2,000+ регулярных выражений для бренда/модели
  5. Эвристика для планшетов Android — Android без токена "Mobile" → планшет
  6. Резервное мобильное обнаружение — токен "Mobile" → мобильный
  7. Обнаружение браузера — 500+ паттернов с захватом версии
  8. Обнаружение движка — Blink, Gecko, WebKit и т.д.
  9. Обнаружение ОС — 300+ паттернов с классификацией семейства

Результаты кэшируются на уровне запроса в контексте модуля.

Сравнение с альтернативами

Функция Этот модуль 51Degrees WURFL DeviceAtlas
Обнаружение в процессе ❌ (Облако)
Без затрат на каждый запрос
Обнаружение AI-краулеров
Категоризация ботов Ограниченная Ограниченная Ограниченная
Client Hints
JSON-вывод
Динамический модуль N/A