Конфигурация ограничения скорости не работает в nginx

Конфигурация ограничения скорости не работает в nginx

Я пытаюсь ограничить скорость вызовов URL-адресов с префиксом /api/. Я настроил ограничение скорости с помощью прикрепленной конфигурации, но не вижу никакого регулирования при использовании Axios для тестирования.

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
    server_name gmmff.test;
    root /home/angel/wdev/laravel/gmf/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    error_log /var/log/nginx/gmf.log warn;
    access_log /var/log/nginx/gmf-access.log;
    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location /api/ {
        limit_req zone=mylimit;
        rewrite ^/api/(.*)$ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

}

решение1

URI, начинающиеся с , /api/перезаписываются, /index.phpи limit_reqдиректива больше не находится в области действия при обработке последнего URI.

Вариант 1) Вы можете обработать index.phpфайл внутри location /api/блока.

Например:

location /api/ {
    limit_req zone=mylimit;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root/index.php;
    fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
}

Просто укажите SCRIPT_FILENAMEместоположение index.php.


Вариант 2) Переместить limit_reqдирективу так, чтобы она всегда находилась в области действия, но фактически включать и выключать ее, манипулируя переменной «key» с помощью mapдирективы.

Например:

map $request_uri $token {
    ~^/api/    $binary_remote_addr;
    default    '';
}
limit_req_zone $token zone=mylimit:10m rate=1r/s;

server {
    ...
    limit_req zone=mylimit;
    ...
}

Отдокументация:

Запросы с пустым значением ключа не учитываются.

Связанный контент