BotBan Защита сайта от ботов
Попробовать
Меню
BotBan Защита сайта от ботов
Тема оформления

Хостинг пишет о превышении нагрузки: как понять, что это боты, и что делать

Процессорное время на хостинге кончается не от покупателей. Разбираем, как по логам за десять минут понять, кто грузит сайт, и почему переход на тариф дороже обычно ничего не решает.

5 мин чтения

Письмо от хостинга приходит обычно ночью: «превышена допустимая нагрузка на процессор», «сайт временно ограничен», «рекомендуем перейти на тариф выше». Первая реакция — перейти. Вторая, если повезло, — посмотреть, кто именно нагрузил. В большинстве случаев, которые мы разбирали, это были не покупатели.

Как хостинг считает нагрузку

Виртуальный хостинг делит один сервер между сотнями сайтов, и у каждого есть лимит процессорного времени: сколько секунд процессора сайт может потратить в сутки или в час. У разных хостингов единицы называются по-разному, но смысл один: каждый запрос, который доходит до PHP и базы данных, стоит сколько-то миллисекунд. Страница каталога с фильтрами стоит дорого, главная из кэша — почти ничего.

Боты в этой экономике хуже людей по двум причинам. Они не ходят по кэшированным страницам, а перебирают всё подряд: фильтры, сортировки, пагинацию, поиск по сайту с разными словами. И их много: человек открывает пять страниц за визит, парсер — пять тысяч.

Как проверить за десять минут

Откройте лог веб-сервера в панели хостинга за последний час и посмотрите на него с трёх сторон. Если есть доступ по SSH, это три команды; если нет, достаточно скопировать кусок лога в анализатор.

Сначала — кто делает больше всего запросов:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

Если первые строки — адреса с тысячами запросов, вопрос почти решён. Проверьте, не робот ли это Яндекса или Google: у них в строке User-Agent стоит имя, и оно подтверждается обратным DNS. Если имя Googlebot, а обратный DNS отдаёт хостинг в Нидерландах, это подделка.

Потом — куда ходят:

awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -30

Тысячи запросов к одной странице поиска с разными параметрами, к фильтрам каталога, к /wp-login.php на сайте без WordPress — это боты. Люди так не ходят.

И наконец, чем представляются:

awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head

python-requests, curl, Go-http-client, Scrapy и пустая строка вместо User-Agent — автоматика, не скрывающая, что она автоматика.

Что это бывает на практике

Сайт стоматологической клиники на собственном сервере хостинг отключал дважды «за нагрузку на сеть». В логах было 200–250 запросов в минуту, из них людей меньше десятой части. Запросы шли с адресов США (534 тысячи за период), Китая и Литвы, а отдельной строкой — 63 тысячи запросов из Ирландии от краулера одной соцсети, который ходил по ловушечным ссылкам, невидимым для людей. После подключения за восемь дней защита проверила 1,31 млн запросов и остановила 926 тысяч; сервер перестал упираться в лимит.

Магазин ковролина падал по несколько раз в день. Там виноват был не рой, а робот Яндекс Директа: 10,8 тысячи запросов в сутки к одной тяжёлой странице, на сайте, который и без того собирал страницу медленно. Блокировать такого робота нельзя, Директ сочтёт сайт недоступным. Помог кэш именно этой страницы и ускорение самого сайта. Это важный случай: не всякая нагрузка от роботов снимается защитой, иногда нужно чинить сайт.

Интернет-магазин напольных покрытий получал до 1,4 млн запросов в сутки из зарубежного роя. Мы измерили, во что это обходится серверу: пропущенный запрос стоил в среднем 0,26 секунды процессора, заблокированный — 0,012. За месяц 3,76 млн остановленных запросов сэкономили около 250 часов процессорного времени, по восемь с лишним часов в сутки.

Почему тариф выше не помогает

Потому что рой не знает про ваш тариф. Переехав на тариф с лимитом в два раза больше, вы получите тот же рой и такое же письмо через месяц, когда он вырастет. Деньги уйдут на обслуживание чужих скриптов, а не на покупателей.

Переезд на VPS снимает лимит хостинга, но не снимает нагрузку: сайт по-прежнему собирает страницы для ботов, просто теперь это ваша забота, а не хостинга.

Что делать по порядку

  1. Убедитесь, что это боты, а не ваш же сайт. Бесконечный цикл в плагине или тяжёлый cron-скрипт тоже дают нагрузку, и в логе это видно по запросам с собственного адреса сервера.
  2. Проверьте кэш. Если главная и категории собираются заново на каждый запрос, любой робот, даже полезный, будет дорогим. Это чинится на стороне сайта, и это первое, что стоит сделать.
  3. Остановите ботов до сборки страницы. Модуль защиты ставится первой строкой входного файла и отвечает отказом раньше, чем сайт откроет базу. Роботов поисковиков он подтверждает обратным DNS и пропускает, ваши служебные адреса — по белому списку.
  4. Самых назойливых отсекайте ещё раньше. Список адресов для файрвола и журнал для fail2ban не пускают рой даже до PHP, и процессор на них не тратится вовсе.
  5. Следите за всплесками. Рой приходит волнами; при наплыве из одной страны защита включает режим «Под атакой» сама и выключает, когда волна прошла.

Как понять, что помогло

В кабинете BotBan есть карточка «Нагрузка на сервер»: модуль измеряет процессорное время каждого запроса и показывает, сколько ушло на людей, сколько на роботов и сколько сэкономлено на остановленных запросах. Если после подключения хостинг продолжает писать о нагрузке, в документации есть разбор, что проверить: чаще всего это роботы, которых пропускать обязательно, или сам сайт.

Решение по теме

Термины из статьи

Как это настроить в BotBan

Читайте также