nginx limit_req로 요청 속도 제한하기
조회 0 · 댓글 0
로그인이나 API 같은 특정 경로에 들어오는 요청 속도를 제한하고 싶을 때 ngx_http_limit_req_module을 씁니다. 먼저 http 블록에 공유 메모리 영역과 기준 속도를 정의하고, 제한할 location에서 그 영역을 참조합니다.
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /login/ {
limit_req zone=one burst=5 nodelay;
}
}
}rate는 평균 처리 속도입니다. 1r/s면 초당 1건, 1r/s 미만은 분 단위로 적습니다(0.5r/s는 rate=30r/m). burst는 기준을 넘는 요청을 몇 건까지 큐에 받아둘지인데 기본값은 0이라 지정하지 않으면 기준 초과분은 바로 거절됩니다. burst만 주면 초과 요청을 지연시켜 평균 속도에 맞추고, nodelay를 붙이면 burst 범위 안의 요청은 지연 없이 즉시 처리하되 그 칸을 다 쓰면 거절합니다.
거절 시 응답 코드는 기본 503입니다. 클라이언트에 재시도 성격을 알리고 싶으면 limit_req_status 429;로 바꿉니다. 영역 크기(10m)는 상태를 저장할 메모리라 넉넉히 두는 편이 안전합니다.
🔗 https://nginx.org/en/docs/http/ngx_http_limit_req_module.html
로그인 후 답글을 남길 수 있습니다.