접두사 /api/가 있는 URL에 대한 호출의 속도를 제한하려고 합니다. 첨부된 구성으로 속도 제한을 구성했지만 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/
다시 작성되며 후자의 URI가 처리되는 동안 지시문은 더 이상 범위에 포함되지 않습니다 /index.php
.limit_req
index.php
옵션 1) 블록 내에서 파일 을 처리할 수 있습니다 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
항상 범위 내에 있도록 지시문을 이동하되 지시어로 "키" 변수를 조작하여 효과적으로 켜고 끄십시오 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;
...
}
에서문서:
빈 키 값이 있는 요청은 고려되지 않습니다.