2016-11-14 3 views
0

nginx에서 동적 연결 제한을 사용할 수 있습니까? 나는에 대한/경로/* 글로벌 속도 제한하지만, 각 경로에 대한 특정을하지 않으Nginx : 동적 속도 제한

/route/1 
/route/2 
... 
/route/* 

:

내가 다음과 같은 경로를 갖고 있다고 할 수 있습니다. nginx에서 가능합니까?

각 경로의 연결 제한은 분당 2 개입니다.

내가 생각하는 것 : 모든 후/경로/오는 모든 ID로 행동해야합니다. 그리고 각 id는 자체 연결 제한이 있습니다.

limit_conn_zone $request_uri zone=addr:10m; 

server { 
    ... 
    limit_conn addr 1; 
} 

을하지만 난 예상대로이 작동하는지 확실하지 메신저 :

어쩌면 내가 somehting 등이 될 수있다.

답변

1

limit_connlocation 블록 내에서 사용할 수 있습니다. 그러나 limit_conn은 동시 연결 수를 제한합니다. 요금을 제한하고 싶다면 limit_reqhttp://nginx.org/en/docs/http/ngx_http_limit_req_module.html 모듈을 사용할 수 있습니다.이 위치는 내부에서도 사용할 수 있습니다.

각 위치에 대해 별도의 제한을 원할 경우 - 두 가지 방법이 있습니다. 각 위치에 대한 첫 번째 - 개별 구역 (limit_req_zone). 둘째 - 하나의 영역이지만 경로를 키로 사용합니다. 첫 번째 경우는 대개 메모리 사용량이 많기 때문에 더 좋지만 두 번째 방법의 경우 무제한입니다. 따라서 경로에서 ID를 추출하고 limit_req_zone 키로 사용하십시오.

limit_req_zone $myid zone=one:50m rate=2r/m; 
... 
location ~ ^/route/(?<myid>\d+) { 
    limit_req zone=one; 
} 

당신은 limit_req_zone $binary_remote_addr$myid ... 키를 사용하여, 각 클라이언트의 IP 주소의 각 위치에 대해 별도의 제한이 필요합니다.

+0

이것은 매우 좋아 보입니다 ... 나는 그것을 시도 할 것입니다. – Eric