최근에 사이트 API를 구축 할 때 연결 수가 너무 많으면 백엔드가 직접 충돌하므로 요청을 제한해야한다는 것을 알았습니다. 몇 가지 검색 후 Nginx의 'HttpLimitZoneModule'모듈을 발견했습니다.
# HttpLimitZoneModule을 사용하여 동시 연결 수 제한
limitzone HTTP 범위에서만 정의할 수 limitconn HTTP 서버 위치 범위에서 정의할 수 있습니다.
'''자바
http {
limitconnzone $binaryremoteaddr 영역 = conn:10m;
# 세션을 저장하기 위해 conn이라는 limitconnzone 정의하고, 크기는 10M 메모리이고, 1M은 16000개의 상태를 저장할 수 있습니다.
#$binaryremoteaddr은 동일한 클라이언트 IP 주소를 제한합니다.
#$server_name은 동일한 서버의 최대 동시성 수를 제한하는 것입니다.
limitreqzone $binaryremoteaddr 영역 = ALLIPS : 10M 속도 = 20R / S;
# 세션을 저장하기 위해 allips라는 limitreqzone 정의, 크기는 10M 메모리, 1M은 16000 개의 상태를 저장할 수 있으며, $binaryremoteaddr을 키로 사용하여 초당 평균 요청 수를 20으로 제한하고, rate 값은 정수여야 하며, 요청을 2초 동안 제한하면 30r/m로 설정할 수 있습니다.
서버{
위치 {
limitconn conn 20;
#limitconn 동시 연결 수를 제한합니다.
limitrate 500k;
#limitrate 다운로드 속도를 제한합니다.
limit_req 영역 = Allips 버스트 = 5 nodelay;
#限制每ip每秒不超过20个请求 버스트 횟수는 5이고, brust는 요청이 1초, 2초, 3초, 4초에 대해 19이고 5초에 대해 25이면 허용됨을 의미합니다. 그러나 두 번째 1에 25개의 요청이 있고 두 번째 2에 20개 이상의 요청이 있는 경우 503 오류가 반환됩니다. nodelay, 이 옵션을 설정하지 않으면 평균 속도 제한 요청 수가 엄격하게 사용되며, 첫 번째 초에 25개의 요청이 있을 때 두 번째에 5개의 요청이 실행되고 nodelay가 설정되고 첫 번째 초에 25개의 요청이 실행됩니다.