Nginx блокировка по user agent


Nginx блокировка по user agent нужна когда на сервере размещаются сайты, посещаемые в большом количестве сканирующими роботами. Фильтрация запросов реализуется на уровне веб-сервера Nginx.



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



В них появляются запросы, например от Ahrefs, MJ12bot и подобных. Это сервисы, собирающие информацию о сети, их боты производят большое количество обращений обходя ресурсы, доступные в Интернете.

Такие боты могут создавать очень большую нагрузку посещая сайта в большом количестве. Часто это тысячи запросов, их количество может превышать количество запросов от реальных посетителей сайтов.



Как добавить блокировку ботов по user agent в Nginx


Запросы от ботов можно заблокировать, это делается в конфигурационном файле виртуального хоста — чаще всего это /etc/nginx/sites-available/sitename.ru


Директива с if разбирает параметры запроса и находя соответствие с одним из заданных элементов применяет действие указанное в фигурных скобках.



В данном случае всем ботам будет возвращаться код ответа 403 — Access denied

mcedit /etc/nginx/sites-available/sitename.ru

if ($http_user_agent ~ (Ahrefs|MJ12bot|LinkpadBot|MauiBot)) {
return 403;
}



В скобках можно добавлять другие user-agent, для запросов они всегда отображаются в access.log Nginx.



После внесения любых изменений перечитывается конфигурация Nginx

nginx -s reload



Проверить можно используя wget и задавая один из заблокированных user-agent:

wget --user-agent "Ahrefs" --no-check-certificate https://sitename.ru

—2018-04-30 16:22:27— https://sitename.ru/
Resolving sitename.ru (sitename.ru)… 123.123.123.123
Connecting to sitename.ru (sitename.ru)|123.123.123.123|:443… connected.
HTTP request sent, awaiting response… 403 Forbidden
2018-04-30 16:22:27 ERROR 403: Forbidden.



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

Блокировка по user agent в nginx выполнена.



В логе доступа веб-сервера для запросов будет указан код ответа 403

nginx блокировка по user agent


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

Сказать спасибо