
nginx 속도 제한을 사용하여 다음 규칙을 예로 사용합니다.
limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;
그러면 분당 30개의 요청이 설정됩니다. 그러나 두 번째 규칙을 쌓고 싶으므로 논리는 "분당 30개 요청 또는 초당 1개 요청 중 먼저 오는 것"입니다.
그 이유는 우리가 여전히 분당 30개의 한도를 원하지만 1~2초 동안 10배의 스팸 요청이 표시되는 이상한 시도가 있기 때문입니다. 이로 인해 요청이 그렇게 빨리 전달되면 몇 가지 문제가 발생합니다.따라서 우리는 사용자를 초당 1개의 요청과 분당 30개의 요청으로 제한하고 싶습니다.
문서 참조를 읽었지만 다양한 요율 규칙을 쌓는 것에 대해 많이 보지 못했습니다.
이것이 가능한가? 그렇다면 구문은 무엇입니까?
답변1
동일한 블록에 여러 영역을 적용하는 것은 완벽하게 유효합니다.동일한 키에 대한 요청을 저장하는 여러 영역을 생성할 수도 있습니다(일반적으로클라이언트 IP 주소의 일부 접두사). 처리 비용과 메모리 비용은 최소화됩니다.
다음은 네트워크 주소로 식별된 사용자를 초 및 분 간격으로 제한하고 짧은 시간 동안 정의된 제한을 일시적으로 초과하도록 허용합니다.파열. 이를 허용하면 신뢰할 수 없는 입력 장치 및/또는 네트워크 액세스가 있는 사용자에게 웹 사이트가 덜 손상된 것처럼 보일 수 있습니다. 동일한 요청을 두 번 발행할 수 있습니다.
map $remote_addr $request_limiting_zone_key {
# [..]
}
limit_req_zone $request_limiting_zone_key zone=request_limit_search_second:10m rate=1r/s;
limit_req_zone $request_limiting_zone_key zone=request_limit_search_minute:10m rate=30r/m;
# [..]
location /search {
limit_req zone=request_limit_search_second burst=3;
limit_req zone=request_limit_search_minute burst=3;
}
즉, 웹 서버가 일시적으로 급증하는 검색 요청을 처리할 수 없는 경우 검색 엔진의 부하를 다른 컴퓨터로 오프로드하거나 다른 종류의 속도 제한을 적용해야 할 수도 있습니다.일반적인 사람의 사용과 기계의 능력을 초과하는 사용 사이에 상당한 여유가 필요합니다.따라잡기 위해. 그렇지 않으면 성가신 합법적인 사용자와 악의적인/봇 사용을 제한하지 않는 것 사이에서 안전한 가치를 찾지 못할 수도 있습니다.