2017-10-05 10 views
0

Google API에 대한 액세스를 10 요청/초로 제한해야합니다.토큰에 NGINX 속도 제한 사용

limit_req_zone $의 binary_remote_addr 영역 = mylimit :

내가 해당 설명서에 따라 사용하고 영역입니다 10m 속도 = 10R/S;

이 영역은 사용자 IP 주소를 식별로 사용 ​​제한을 평가합니다. 종종 사람들은 동일한 IP 주소를 사용하여 시스템에 액세스합니다.

속도 제한에 대한 식별자로 사용자 tokenId를 사용할 수 있는지 궁금합니다. 모든 요청에는 URL에 tokenID 매개 변수가 포함되어 있습니다.

실마리가 있습니까?

감사합니다. 이 같은 $tokenid 변수 limit_req_zone "$tokenid" zone=limit:10m rate=1r/s; (테스트/s 1R) 및 추출 :

limit_req_zone "$tokenid" zone=limit:10m rate=1r/s; 

server { 
    ... 

    location ~ \.php { 
     ... 
     if ($args ~* "tokenID=([^&]+)") { 
      set $tokenid "$1"; 
     } 
     ... 
    } 
} 

가변 $tokenid 정확한 포함될 않음을

UPDATE

난 영역을 생성하려고 토큰 (응답에 헤더를 추가하여 테스트), limit_req_zone에 의해 사용 된 값을 업데이트하는 것 같지 않습니다.

+2

사용해보십시오'대신 내가 여러 인수를 시도 $ token' –

+0

@TarunLalwani'의 $ arg_tokenID', 그것은 완벽하게 작동하지만, 함께'tokenID' 그것은 아무튼 '티. 대소 문자를 구분할 수 있기 때문일 수 있습니까? –

+0

'tokenID'도'tokenid' 일 수 있다는 것을 의미합니까? 또는 토큰의 실제 값은 응용 프로그램에서 대소 문자를 구분합니까? –

답변

1

@TarunLalwani의 제안이 실제로 작동합니다.

URI에서 추출하고 변수로 설정하는 대신 $arg_tokenID을 사용해야합니다.

은 마지막 설정 파일은 다음과 같습니다

limit_req_zone "$arg_tokenID" zone=limit:10m rate=10r/s; 

server { 
    ... 
    limit_req zone=limit burst=10; 
    ... 
}