Вы здесь

Борьба с referer-спамом в nginx

Так исторически сложилось, что обладаю более чем десятком доменов, на которых пока толком нет проектов и ходить туда живым людям незачем. Всё же из любопытства там стоит Google Analytics. И стал я замечать нездоровое паломничество на совершенно, казалось бы пустые страницы. Выяснилось, что это особые referer-спам боты.

Логика их работы такова. Вы смотрите статистику сайта и видите переходы с сайтов на свой. Конечно же, зайдёте и посмотрите кто на вас ссылается. На это и расчёт. Ссылок на ваш сайт не найдёте, зато, возможно, вам что-то впарят.

Достигается эффект хождением по сайтам спам ботов, которые умеют выполнять JavaScript и светиться в статистике Google Analytics.

Мне это надоело, мало того, что нагрузка на сервер, так ещё и статистика уплывает, нашёл чудесный рецепт по борьбе с явлением.

Приведу краткие выдержки, для тех, кто слабо владеет английским.

1) Создаём каталог /etc/nginx/global

mkdir /etc/nginx/global

2) В нём создаём файл referer-spam.conf с таким содержимым

if ($http_referer ~ "(semalt\.com|buttons-for-website\.com|free-share-buttons\.com|pornhub-forum|theguardlan\.com|googlsucks\.com|4webmasters\.org|best-seo-offer\.com|buy-cheap-online\.info|Get-Free-Traffic-Now\.com|event-tracking\.com|guardlink\.org|youporn-forum\.ga|hulfingtonpost\.com|darodar\.com|hol\.es)") {
set $prohibited "1";
}

if ($prohibited) {
return 403;
}

Разумеется, список ботов у каждого персональный, по десятку сайтов насобирал вот такой.
3) В конфиге каждого сайта в секции server добавляем

include /etc/nginx/global/*.conf;

4) Проверяем конфиги:

nginx -t

5) Перезапускаем nginx
В случае если дистрибутив использует systemd

systemctl restart nginx

Иначе как там у вас принято.
6) ?????
7) PROFIT!

В итоге бот получает свою 403 ошибку, всё, что там дальше за nginx не дёргается.