NGINX-남용 방지를위한 스로틀 요청


28

내가하고 싶은 이유는 사용자가 JavaScript를 사용하여 API를 사용하여 개발하고 일부 개발자가 AJAX 요청으로 서버를 망치게하기 때문입니다. 이 일이 발생하면 API 요청을 분당 50 건의 요청 또는 그 영향을 줄 수 있습니다.

참고 : (특히 DB 집중 리소스는 서버 전체가 아닌 경로 수준 일 수 있습니다 (예 : 스로틀 "/ json_api /", "/ static /"아님)).

답변:


36

이것은 Nginx와 함께 LimitReqModule 을 사용하여 수행 할 수 있습니다 . 그러나 이것이 리버스 프록시 인 경우 HAProxy가 지원 하는 새로운 속도 제한 을 시도 할 수 있습니다 .

nginx 속도 제한 이 원하는 정확한 속도를 얻는 데 약간 혼란 스럽다는 것을 알았습니다 .

그러나 기본적으로 다음과 같은 것이 있습니다.

limit_req_zone  $binary_remote_addr  zone=default:10m   rate=50r/m;

에서 http부와 상기에서 다음과 같은 무언가 location내에서 섹션 server섹션 :

limit_req zone=default burst=10 nodelay;

/static당신 과 같은 특정 섹션에 대해 그것을 갖지 않으려면 별도로 지정 location하고 limit_req지시문 (또는 역)을 포함시키지 마십시오 .


감사. 그것들이 무엇을하고 있는지 설명 할 수 있습니까 (zone, burst, nodelay)? 그리고 zone=limit_req_zone대신 에을 넣으려고 했습니까?
orokusaki

솔직히 나는 그것들을 잘 설명 할 수 없기 때문에 혼란 스럽습니다. 내가 제공 한 링크에서 Michael의 설명은 가능할 것 같은 소리로 들립니다. 나는 당신의 두 번째 질문이 나올 때까지 오타가 있다고 생각하지 않습니다 ... 링크 된 모듈 문서에는 도움이 될만한 예가 있습니다.
Kyle Brandt

2
zone, burst 및 nodelay는 속도 제한 모듈대한 Nginx Wiki 페이지에 문서화되어 있으며 위의 답변에서 이미 링크되었습니다.
Mark Stosberg

Kyle, 위치 당 속도 제한을 다른 트리거 (예 : Authorization-Header)와 결합 할 수있는 방법이 있는지 알고 있습니까? 제 경우에는 특정 사용자의 속도를 조절하고 싶을 수 있습니다.
닐스

1
@Nils AFAICS $http_authorization변수를 사용하여 IP 주소가 아닌 키가 헤더 인 새 영역을 정의한 limit_req_zone $http_authorization zone = per_user : 10m rate = 5r/s다음 per_user사용자 별 속도 제한을 수행하려는 위치 섹션에서 영역 을 사용할 수 있습니다. 테스트되지 않은, 나는 단지 문서와 nginx 변수 목록 만 읽습니다. 이걸 시도하면 알려주십시오!
idrarig 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.