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

bot-verifier: Модуль проверки ботов поисковых систем для NGINX

Установка

Вы можете установить этот модуль в любой дистрибутив на базе 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-bot-verifier
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-bot-verifier

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

load_module modules/ngx_http_bot_verifier_module.so;

Этот документ описывает nginx-module-bot-verifier v0.0.17, выпущенный 6 февраля 2026 года.


Модуль NGINX для проверки идентификации ботов поисковых систем через обратный/прямой DNS-запрос.

Этот модуль проверяет участников, утверждающих, что они являются краулерами поисковых систем (Google, Bing, Yahoo, Baidu, Yandex), выполняя метод проверки DNS, рекомендованный каждым поставщиком поиска. Он предотвращает обход мер безопасности злоумышленниками, подделывающими строки User-Agent ботов.

Замена оригинального ngx_bot_verifier от Аарона Бедры.

Особенности

  • Обратная/прямая проверка DNS в соответствии с рекомендациями поставщиков поисковых систем
  • Асинхронное разрешение DNS с использованием встроенного резолвера NGINX (не блокирующее)
  • Кэширование в Redis с пулом соединений для минимизации накладных расходов на запросы DNS
  • Настраиваемые провайдеры - добавление пользовательских провайдеров ботов помимо стандартных
  • Дизайн с открытым доступом - ошибки проверки позволяют запросам проходить, чтобы избежать блокировки легитимного трафика
  • Поддержка реального IP через ngx_http_realip_module для развертываний за прокси

Поддерживаемые провайдеры

Встроенные провайдеры

Провайдер Проверенные домены
Google google.com, googlebot.com
Bing search.msn.com
Yahoo yahoo.com
Baidu crawl.baidu.com
Yandex yandex.com, yandex.net, yandex.ru

Пользовательские провайдеры

Добавьте пользовательских провайдеров с помощью директивы bot_verifier_provider:

bot_verifier_provider facebook .facebook.com .fbcdn.net;
bot_verifier_provider apple .applebot.apple.com;

Пользовательские провайдеры проверяются дополнительно к встроенным провайдерам.

Синопсис

http {
    # Обязательно: Настройте модуль realip для доверия вашим прокси
    set_real_ip_from 10.0.0.0/8;
    set_real_ip_from 172.16.0.0/12;
    set_real_ip_from 192.168.0.0/16;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    # Обязательно: Настройте резолвер для неблокирующих запросов DNS
    resolver 8.8.8.8 8.8.4.4 valid=300s ipv6=off;
    resolver_timeout 5s;

    server {
        location / {
            bot_verifier on;
            bot_verifier_redis_host localhost;
            bot_verifier_redis_port 6379;
            bot_verifier_redis_expiry 3600;

            # Необязательно: Добавьте пользовательских провайдеров
            bot_verifier_provider applebot .applebot.apple.com;
        }
    }
}

Директивы

bot_verifier

синтаксис: bot_verifier on|off;

по умолчанию: off

контекст: http, server, location

Включает или отключает проверку ботов. Когда включено, запросы с строками User-Agent, соответствующими известным шаблонам ботов, проверяются через DNS-запрос.

bot_verifier_provider

синтаксис: bot_verifier_provider <name> <domain1> [domain2] ...;

по умолчанию: нет

контекст: http, server, location

Добавляет пользовательского провайдера ботов для проверки. name сопоставляется со строками User-Agent (без учета регистра). Домены используются для проверки результата обратного DNS-запроса.

Пример:

bot_verifier_provider facebook .facebook.com .fbcdn.net;
bot_verifier_provider apple .applebot.apple.com;
bot_verifier_provider duckduckgo .duckduckgo.com;

Пользовательские провайдеры проверяются дополнительно к встроенным провайдерам (Google, Bing, Yahoo, Baidu, Yandex).

bot_verifier_redis_host

синтаксис: bot_verifier_redis_host <hostname>;

по умолчанию: localhost

контекст: http, server, location

Имя хоста сервера Redis для кэширования результатов проверки.

bot_verifier_redis_port

синтаксис: bot_verifier_redis_port <port>;

по умолчанию: 6379

контекст: http, server, location

Порт сервера Redis.

bot_verifier_redis_connection_timeout

синтаксис: bot_verifier_redis_connection_timeout <milliseconds>;

по умолчанию: 10

контекст: http, server, location

Таймаут для установления соединений с Redis.

bot_verifier_redis_read_timeout

синтаксис: bot_verifier_redis_read_timeout <milliseconds>;

по умолчанию: 10

контекст: http, server, location

Таймаут для операций чтения Redis.

bot_verifier_redis_expiry

синтаксис: bot_verifier_redis_expiry <seconds>;

по умолчанию: 3600

контекст: http, server, location

TTL для кэшированных результатов проверки. После истечения срока действия следующий запрос с того же IP вызывает новую проверку DNS.

bot_verifier_redis_database

синтаксис: bot_verifier_redis_database <number>;

по умолчанию: 0

контекст: http, server, location

Номер базы данных Redis, используемой для хранения результатов проверки.

bot_verifier_redis_password

синтаксис: bot_verifier_redis_password <password>;

по умолчанию: пусто

контекст: http, server, location

Пароль для аутентификации Redis. Оставьте пустым, если Redis не требует аутентификации.

Асинхронное разрешение DNS

Когда директива NGINX resolver настроена, модуль выполняет DNS-запросы асинхронно с использованием встроенного резолвера NGINX. Это рекомендуемая конфигурация для продакшена:

  • Не блокирующее - запросы DNS не блокируют процессы рабочих процессов NGINX
  • Масштабируемое - обрабатывает высокий трафик без всплесков задержки из-за DNS
  • Гладкие таймауты - медленные ответы DNS не влияют на другие запросы

Поток проверки:

  1. Обратный DNS-запрос (PTR-запись) для IP клиента
  2. Проверка, что разрешенное имя хоста заканчивается на домен известного провайдера
  3. Прямой DNS-запрос (A-запись) для подтверждения соответствия IP
  4. Кэширование результата в Redis

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-bot-verifier.