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

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

Установка на Debian/Ubuntu

Эти документы относятся к APT пакету nginx-module-device-type, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в Настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-device-type
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия            | Компонент  | Архитектуры   |
|-------------|-------------------|------------|----------------|
| debian      | bookworm          | main       | amd64, arm64   |
| debian      | bookworm-mainline | main       | amd64, arm64   |
| debian      | trixie            | main       | amd64, arm64   |
| debian      | trixie-mainline   | main       | amd64, arm64   |
| ubuntu      | focal             | main       | amd64, arm64   |
| ubuntu      | focal-mainline    | main       | amd64, arm64   |
| ubuntu      | jammy             | main       | amd64, arm64   |
| ubuntu      | jammy-mainline    | main       | amd64, arm64   |
| ubuntu      | noble             | main       | amd64, arm64   |
| ubuntu      | noble-mainline    | main       | amd64, arm64   |

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

License NGINX

Зачем нужен этот модуль?

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

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

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

Особенности

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

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

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

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