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
Доступ можно запрещать и для определенных пользователей, формируя для них страницу ошибки с любым содержанием.