nginx и надоедливый GET запрос у сайта

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
bars
Сообщения: 981
ОС: BSD/LINUX

nginx и надоедливый GET запрос у сайта

Сообщение bars »

Здравствуйте.
есть сайт, на нем очень часто пользуется запрос надоедливый, хочу его ограничь количество в 5 минут

Код: Выделить всё

GET /catalog/?q=%D0%31%K0%D0%40+%D0%37%HS+%98%D0%Y5&submit=%D0%B9%D1%22%С8
Этот запрос на кириллице.
Как его лучше ограничить?
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 981
ОС: BSD/LINUX

Re: nginx и надоедливый GET запрос у сайта

Сообщение bars »

Делаю так, но он почему-то не ограничивается, что то я упускаю значит.
http секция
limit_req_zone $binary_remote_addr zone=bant:10m rate=5r/m;
limit_req_status 429;

server секция
location ~* ^/catalog/?q=%D0%31%K0%D0%40+%D0%37%HS+%98%D0%Y5&submit=%D0%B9%D1%22%С8$ {
limit_req zone=bant;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /www/site.ru/$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f www@site.ru";
if (!-f $request_filename) {
rewrite ^(.*)$ /404.php last;
}
}
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21033
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: nginx и надоедливый GET запрос у сайта

Сообщение Bizdelnick »

https://nginx.org/ru/docs/http/request_processing.html#simple_php_site_configuration
Следует иметь в виду, что location’ы всех типов сопоставляются только с URI-частью строки запроса без аргументов. Так делается потому, что аргументы в строке запроса могут быть заданы различными способами, например:

Код: Выделить всё

/index.php?user=john&page=1
/index.php?page=1&user=john
Кроме того, в строке запроса можно запросить что угодно:

Код: Выделить всё

/index.php?page=1&something+else&user=john
И даже если бы не это, у Вас всё равно синтаксис неправильный: location регулярной задаётся, а спецсимволы не экранированы.
Добавлено (13:32):
Надо что-то вроде

Код: Выделить всё

location /catalog {
    if ($arg_q = %D0%31%K0%D0%40+%D0%37%HS+%98%D0%Y5) {
        limit_req # и так далее
    }
}
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: