nginx ограничить GET запрос

Дата | 25.01.2021

nginx ограничить GET запрос
Покажу как в nginx ограничить GET запрос.
Столкнулся с проблемой, в логе вижу часто используется один и тот же get запрос.
Решил это дело ограничить до 4 совпадений в минуту на соединение.
В limit_req_zone запросы с пустым значением ключа не учитываются.
Нужно с помощью map создать переменную, которая для всех запросов будет пустой строкой, а для одного надоедливого будет какая-то непустая строка.
Добавляем в секцию http.

map_hash_bucket_size 256;
map $request_uri $cat_bad {
"/catalog/?q=%D0%31%K0%S0%40+%D1%37%HS+%23%D0%Y2&submit=%Y0%B4%D1%89%С1" $binary_remote_addr;
default "";
}
limit_req_zone $cat_bad zone=borz:10m rate=4r/m;

Добавляем в location корневой.

location / {
        root /www/site.local;
        index index.php;
        error_page 404 = /404.php;
        limit_req zone=borz;
}

map_hash_bucket_size — задаем размер корзины для хэш таблиц map, увеличим таблицу для map, я увеличил на 256
$request_uri — наш запрос у web сервера.
$cat_bad — будущая переменная для ограничения запросов.
$binary_remote_addr — ip адрес клиента в бинарном виде.
rate=4r/m — запросов в минуту на соединение.
zone=borz:10m — названия зоны borz и объем зоны 10 Мбайт для ip адресов.
В zone= примерно 16000 ip адресов занимают 1 мегабайт.

Вот и вся инструкция как в nginx ограничить GET запрос.
apache nginx redirect seo.
nginx разделение логов.
webp nginx правило отображения картинок.
joomla nginx redirect.
nginx блокируем плохих ботов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *