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.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 не влияют на другие запросы
Поток проверки:
- Обратный DNS-запрос (PTR-запись) для IP клиента
- Проверка, что разрешенное имя хоста заканчивается на домен известного провайдера
- Прямой DNS-запрос (A-запись) для подтверждения соответствия IP
- Кэширование результата в Redis
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-bot-verifier.