Контроль частоты запросов Bingbot в nginx
Предварительная заметка
В этой инструкции основное внимание уделено Bingbot, потому что он часто создаёт большое количество соединений при обходе сайта. Первое действие — настроить скорость обхода в Bing Webmaster Tools. Если у вас нет доступа к этим инструментам для всех виртуальных хостов или это не помогло, читайте далее.
Важно: Crawl-delay поддерживается Bingbot, но не Googlebot. Для Google следует применять другие методы.
Использование robots.txt
Bingbot понимает директиву Crawl-delay, поэтому вы можете добавить специальный раздел для него в robots.txt. Пример:
User-Agent: *
Disallow: /cache/
Disallow: /engine/
Disallow: /files/
Disallow: /templates/
Disallow: /uploads/
Disallow: /newsletter/
Disallow: /kontaktformular/
Disallow: /widerrufsrecht/
Disallow: /datenschutz-und-sicherheit
Disallow: /agb/
Disallow: /shopware.php/sViewport,admin
Disallow: /shopware.php/sViewport,note
Disallow: /shopware.php/sViewport,basket
Disallow: /shopware.php/sViewport,rma
Disallow: /shopware.php/sViewport,support
Disallow: /shopware.php/sViewport,ticket
Disallow: /shopware.php/sViewport,newsletter
Disallow: /shopware.php/sViewport,tellafriend
Sitemap: http://www.example.com/sitemap.xml
User-Agent: bingbot
Crawl-delay: 1
Disallow: /cache/
Disallow: /engine/
Disallow: /files/
Disallow: /templates/
Disallow: /uploads/
Disallow: /newsletter/
Disallow: /kontaktformular/
Disallow: /widerrufsrecht/
Disallow: /datenschutz-und-sicherheit
Disallow: /agb/
Disallow: /shopware.php/sViewport,admin
Disallow: /shopware.php/sViewport,note
Disallow: /shopware.php/sViewport,basket
Disallow: /shopware.php/sViewport,rma
Disallow: /shopware.php/sViewport,support
Disallow: /shopware.php/sViewport,ticket
Disallow: /shopware.php/sViewport,newsletter
Disallow: /shopware.php/sViewport,tellafriend
Sitemap: http://www.example.com/sitemap.xmlПояснение:
- Если вы добавляете секцию для bingbot, директивы User-Agent: * не применяются к нему автоматически — повторите нужные Allow/Disallow.
- Crawl-delay: 1 указывает боту выдерживать паузу в примерно 1 секунду между запросами (поведение может варьироваться по реализации бота).
Важно: robots.txt — добровольный механизм; злонамеренные или неправильно настроенные боты его игнорируют.
Использование nginx для контроля подключений бота
Если robots.txt недостаточно, примените контроль на уровне nginx. Мы используем модуль geo для распознавания подсетей бота и limit_req для ограничения скорости запросов.
Откройте конфигурационный файл nginx:
vi /etc/nginx/nginx.confДобавьте в контейнер http {} (перед включением конфигураций vhost):
[...]
geo $isabot {
default 0;
#bingbot
157.55.32.0/24 1;
157.56.229.0/24 1;
157.56.93.0/24 1;
157.55.33.0/24 1;
}
map $isabot $limited_ip_key {
0 '';
1 $binary_remote_addr;
}
limit_req_zone $limited_ip_key zone=isabot:5m rate=2r/s;
limit_req zone=isabot burst=200;
[...]Пояснение параметров:
- geo — помечает запросы из указанных подсетей как бот (isabot = 1). Добавляйте или обновляйте подсети по мере необходимости.
- map — формирует ключ для лимитирования: пустая строка для обычных посетителей (без ограничений), бинарный IP для ботов.
- limit_req_zone — создаёт зону с именем isabot объёмом 5 минут кеша и скоростью 2r/s (2 запроса в секунду).
- limit_req — применяет зону и допускает burst=200 — это значит, что избыточные запросы будут буферизованы в очереди до 200 «всплесков», после чего nginx начнёт отдавать 503.
Практическая интерпретация: Bingbot будет допущен в среднем к ~2 запросам/с, кратковременные пики будут отложены в буфере до 200 запросов; при переполнении буфера последующие запросы будут получать 503.
Не забудьте перезагрузить nginx после изменений:
/etc/init.d/nginx reloadКогда это не сработает
- Если бот поддельно маскирует свои IP (использует прокси) — geo по IP не поймает такой трафик.
- Если бот не соблюдает robots.txt — директивы не применяются.
- При распределённой атаке с множества IP (или CDN) простая geo/limit_req может быть недостаточна.
Альтернативные подходы
- Rate limiting по User-Agent в upstream или в firewall (iptables, nftables) — полезно, если бот идентифицирует себя явно.
- Использовать WAF (Web Application Firewall) с динамическим ограничением частоты и автоматическим блокированием аномалий.
- Проксирование запросов через CDN с функционалом rate limiting и бот-менеджментом (например, правила в CDN для ограничения пауков).
- Перевести важные vhost-ы на отдельные узлы/контейнеры, чтобы снизить влияние на остальные сайты.
Мини-методология для админа (быстрая последовательность)
- Проверка логов: определите IP-подсети и паттерны запросов (User-Agent, частота).
- Настройка Crawl-delay в Bing Webmaster Tools (при доступе).
- Добавить секцию в robots.txt для bingbot с Crawl-delay и нужными Disallow.
- В nginx: добавить подсети в geo, настроить limit_req_zone и limit_req с небольшим rate и разумным burst.
- Мониторинг в течение 24–72 часов: метрики CPU, load, количество соединений, частота 503.
- Корректировка подсетей и параметров rate/burst по результатам наблюдений.
Чек-лист для роли администратора
- Определил подсети Bingbot в логах
- Настроил Crawl-delay в Bing Webmaster Tools (если есть доступ)
- Добавил секцию User-Agent: bingbot в robots.txt
- Обновил /etc/nginx/nginx.conf (geo, map, limit_req_zone, limit_req)
- Перезагрузил nginx и проверил конфигурацию на синтаксис
- Наблюдаю метрики и корректирую параметры
Критерии приёмки
- Средняя нагрузка CPU/Load уменьшилась до целевого уровня
- Количество параллельных соединений от Bingbot стабильно и предсказуемо
- Нет значительного увеличения законных 503 для пользователей
- Логи показывают соблюдение ограничений bot-пауком
Пара случаев и рекомендации безопасности
- Не блокируйте полностью поисковые боты, если вам важна их индексация. Вместо этого ограничьте скорость.
- Обновляйте список IP-подсетей бота — поставщики меняют адреса.
- Следите за ложными позитивами: иногда прокси и пользователи из тех же подсетей могут попасть под правило.
Mermaid: простое дерево решений
flowchart TD
A[Высокая нагрузка от бота] --> B{Идентичен ли User-Agent?}
B -->|Да| C[Проверить подсети в логах]
B -->|Нет| D[Использовать WAF/CDN/Firewall]
C --> E{Есть доступ в Bing Webmaster Tools?}
E -->|Да| F[Ограничить Crawl-rate в Bing]
E -->|Нет| G[Добавить Crawl-delay в robots.txt и nginx limit_req]
D --> H[Внедрить WAF/CDN или правила firewall]Часто задаваемые вопросы
Q: Работает ли это с Googlebot? A: Googlebot не поддерживает Crawl-delay в robots.txt. Для Google используйте Google Search Console для управления скоростью обхода или применяйте серверные лимиты (limit_req) и WAF.
Q: Что произойдёт с легитимными посетителями из тех же подсетей? A: Если вы ограничиваете по IP-подсетям, есть риск затронуть реальных пользователей, если они шли через те же подсети. Тщательно анализируйте логи перед применением.
Q: Как быстро применять изменения? A: После правки nginx конфигурации выполняйте /etc/init.d/nginx reload. Наблюдайте минимум 24–72 часа для оценки эффекта.
Ресурсы
- nginx: http://nginx.org/
- nginx Wiki: http://wiki.nginx.org/
- Bing: рекомендации по обходу и документация в Bing Webmaster Tools
Резюме: сочетание корректно настроенного robots.txt и серверных лимитов в nginx даёт гибкий, контролируемый способ снизить нагрузку от поисковых ботов без полного блокирования индексации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента