@iroge

Как ограничить запросы в nginx по GET параметру и ip?

Товарищи админы. Такая ситуация, что все запросы формируются не по ссылке, а по get параметру. То есть есть запрос localhost/api.php?method="какой-то метод" . Так вот ситуация такая, что нужно для запросов с method=phone ограничить по ip в nginx количество запросов в секунду . То есть чтобы на один ip при запросах с параметром method=phone можно было сделать максимально 5 запросов. Как организовать конфиг в nginx? Вот я пытался сделать такой конфиг - не работает. Может кто сталкивался и может подсказать?

http {
        limit_req_status 429;
        limit_req_zone $binary_remote_addr$arg_method=phone zone=perip:10m rate=5r/s;
        
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm;

        server_name localhost;

        server {
               limit_req zone=perip burst=5;

               location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

                # sh new params
                fastcgi_read_timeout 3600;
        }
   
        }
}
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
@dodo512
limit_req_zone
Запросы с пустым значением ключа не учитываются.

Нужно с помощью map для запросов с method=phone ставить $binary_remote_addr в качестве ключа limit_req_zone, а для всех остальных запросов возвращать пустую строку.
map $arg_method $var {
    default  "";
    "phone"  $binary_remote_addr;
}

limit_req_zone $var zone=perip:10m rate=5r/s;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы