Покажу как в 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 блокируем плохих ботов.