http user agent nginx

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

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

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

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

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

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

if ($http_user_agent

(Ahrefs|MJ12bot|LinkpadBot|MauiBot)) <
return 403;
>

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

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

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

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

greenzerg, и в чём проблема?

Я правда не проверял в деле, но вроде всё норм. Не понимаю что тут сложного?

Есть приложение, которое по HTTP протоколу подключается к Web сайту и получает от PHP скриптов информацию или статический файл. Стоит задача ограничить доступ через функционал Nginx к сайту по полю User-Agent . Беда в том, что в интернетах я не нашёл адекватного описания как формируется это самое правило для моего случая.

В моём случает строка состоит из следующего значение (не статическое) — MyAppWebKit x.x.x.x. Где x.x.x.x — версия клиента. Она меняется в зависимости от билда приложения.

Код который я в данный момент использую в Nginx работает, но рубит всё:

Код в приложении для доступа к сайту:

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

Оцените статью