Хостинг пишет о превышении нагрузки: как понять, что это боты, и что делать
Процессорное время на хостинге кончается не от покупателей. Разбираем, как по логам за десять минут понять, кто грузит сайт, и почему переход на тариф дороже обычно ничего не решает.
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 снимает лимит хостинга, но не снимает нагрузку: сайт по-прежнему собирает страницы для ботов, просто теперь это ваша забота, а не хостинга.
Что делать по порядку
- Убедитесь, что это боты, а не ваш же сайт. Бесконечный цикл в плагине или тяжёлый cron-скрипт тоже дают нагрузку, и в логе это видно по запросам с собственного адреса сервера.
- Проверьте кэш. Если главная и категории собираются заново на каждый запрос, любой робот, даже полезный, будет дорогим. Это чинится на стороне сайта, и это первое, что стоит сделать.
- Остановите ботов до сборки страницы. Модуль защиты ставится первой строкой входного файла и отвечает отказом раньше, чем сайт откроет базу. Роботов поисковиков он подтверждает обратным DNS и пропускает, ваши служебные адреса — по белому списку.
- Самых назойливых отсекайте ещё раньше. Список адресов для файрвола и журнал для fail2ban не пускают рой даже до PHP, и процессор на них не тратится вовсе.
- Следите за всплесками. Рой приходит волнами; при наплыве из одной страны защита включает режим «Под атакой» сама и выключает, когда волна прошла.
Как понять, что помогло
В кабинете BotBan есть карточка «Нагрузка на сервер»: модуль измеряет процессорное время каждого запроса и показывает, сколько ушло на людей, сколько на роботов и сколько сэкономлено на остановленных запросах. Если после подключения хостинг продолжает писать о нагрузке, в документации есть разбор, что проверить: чаще всего это роботы, которых пропускать обязательно, или сам сайт.
Решение по теме
Термины из статьи
Как это настроить в BotBan
Читайте также
- Сколько ботов приходит на сайты: данные 14 сайтов за 30 дней Месяц журнала 14 сайтов, 20,3 млн запросов к страницам: больше половины движок счёл подозрительными. Объясняем, откуда такая цифра, почему людей при этом не задевают и почему в рекламе ботов почти нет, а в формах — треть.
- Проверка сайта на ботов: бесплатные инструменты и что они на самом деле показывают Метрика не видит тех, кто не выполняет скрипт, лог не отличает Chrome от программы, назвавшейся Chrome, а проверка адреса ничего не знает о запросе. Разбираем пять бесплатных способов проверить сайт на ботов и слепое пятно каждого.
- Боты на сайте: зачем они приходят, как их увидеть и что делать Половина запросов к обычному сайту приходит не от людей, и это нормально. Ненормально другое: когда вы не знаете, кто эти «не люди». Разбираем по порядку, с цифрами.