Технологии28.07.2026, 02:152 мин чтенияNEWS

Как отличить живых посетителей от ботов: разбор логов nginx на сайте-визитке

Автор проанализировал 2129 запросов к статическому сайту и обнаружил, что только 8% уникальных адресов — реальные люди

График или схема, иллюстрирующая разницу между общим числом запросов и реальными посетителями
КРАТКО

Что нужно знать

  • Из 273 уникальных адресов только 21 (8%) оказался живым посетителем
  • Фильтр по User-Agent отсеял лишь 12% запросов, так как многие боты маскируются
  • Поведенческий признак (загрузка стилей) эффективнее списка известных ботов
  • Счётчик скачиваний не отличает людей от роботов: все 4 полных скачивания сделаны не пользователями
  • Рекомендуется использовать несколько уровней защиты: обрыв запросов, лимит частоты, fail2ban и robots.txt
ИсточникХабр ↗

Разработчик под ником BborlasS опубликовал на Хабре статью, в которой рассказал, как анализировал логи nginx своего сайта-визитки и обнаружил, что из 273 уникальных IP-адресов за трое суток только 21 (8%) принадлежал реальным людям. Остальные запросы оказались от ботов, сканеров и краулеров.

Что произошло

Автор создал статический сайт для своей утилиты под Windows, разместил его на дешёвом VPS с nginx и не использовал внешние счётчики, чтобы не нарушать принцип конфиденциальности. Через трое суток он проанализировал сырые логи и увидел 273 уникальных адреса, 165 из которых открыли главную страницу. Однако при детальном разборе выяснилось, что большинство запросов — от ботов.

Метод фильтрации по User-Agent не сработал

Первая попытка отсеять ботов по User-Agent (список известных роботов) отфильтровала лишь 12% запросов. Многие сканеры маскируются под браузеры, поэтому такой подход оказался неэффективным.

Поведенческий признак: загрузка стилей

Автор применил другой метод: он проверил, какие IP-адреса запрашивали не только HTML, но и CSS-файлы (styles.css) или ресурсы из папки /assets/. Браузер человека загружает оформление, а сканеры — нет. С помощью однострочного awk-скрипта он выделил 21 адрес, которые вели себя как браузеры. Это составило 8% от исходных 273.

Скачивания: ни одного пользовательского

За двое суток файл установщика (67 МБ) был полностью скачан 4 раза: трижды — краулером ИИ-компании и один раз — самим автором для проверки. Пользовательских скачиваний не было. Остальные 7 обращений оборвались на первых сотнях килобайт.

Меры по защите сервера

Автор внедрил четыре меры, не затрагивающие поисковую индексацию:

  • Обрыв заведомо чужих запросов — nginx возвращает код 444 (закрытие соединения без ответа) на пути вроде /.env, /.git, *.php, /wp-.
  • Ограничение частоты запросов — лимит 10 запросов в секунду с burst 30, при превышении — код 429.
  • Блокировка через fail2ban — три подозрительных запроса за час ведут к бану на сутки.
  • Robots.txt — запрет на скачивание файлов для всех краулеров.

Что это значит

История показывает, что стандартные счётчики и фильтры по User-Agent могут сильно завышать реальную посещаемость. Поведенческие признаки (загрузка статических ресурсов) и анализ логов дают более точную картину. Для проектов, раздающих файлы, важно учитывать, что скачивания могут совершать не люди, а боты, и это влияет на расход трафика.

ВОПРОСЫ И ОТВЕТЫ

Коротко о главном

Сколько уникальных адресов было в логах за трое суток?

273 уникальных адреса.

Сколько из них оказались живыми посетителями?

21 адрес (8%).

Почему фильтр по User-Agent не сработал?

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

Какой поведенческий признак использовался для отбора живых?

Запрос CSS-файлов (styles.css) или ресурсов из /assets/ вместе с HTML.

Сколько полных скачиваний файла было зафиксировано?

4 полных скачивания: 3 от краулера ИИ-компании и 1 от самого автора.

Какие меры защиты были внедрены?

Обрыв запросов к подозрительным путям (код 444), ограничение частоты запросов (10 r/s, burst 30), блокировка через fail2ban (3 попытки за час — бан на сутки) и robots.txt с запретом скачивания.

Как подготовлен материал

Черновик был создан с помощью AI по указанному первоисточнику и опубликован в формате ITBlogs. Факты следует сверять с оригинальной публикацией.

С
АВТОР

Сергей

Администратор проекта

DISCUSSION

Комментарии · 0

Войдите, чтобы участвовать в обсуждении.