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

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

 

Nginx блокировка по user agent, фильтрация запросов

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

 

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

 

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

 

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

 

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