일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- AWS EKS
- Elasticsearch
- tucker의 go 언어 프로그래밍
- golang
- Pinpoint
- CloudWatch
- 정보처리기사실기 기출문제
- Kubernetes
- CKA 기출문제
- go
- PETERICA
- minikube
- kotlin querydsl
- mysql 튜닝
- CKA
- APM
- docker
- Java
- aws
- 티스토리챌린지
- 정보처리기사 실기 기출문제
- 기록으로 실력을 쌓자
- kotlin coroutine
- 오블완
- Linux
- 공부
- Spring
- kotlin
- 코틀린 코루틴의 정석
- AI
- Today
- Total
피터의 개발이야기
[Nginx] NGINX Rate Limiting & 동적 IP 차단 가이드 본문

ㅁ 들어가며
ㅇ [GO] Too many open files 에러 트러블슈팅에서 이미 만료된 ts를 무한으로 요청하는 문제점을 발견하였다.
ㅇ [Nginx] NGINX에서 정적 파일 캐시 설정하는 방법을 통해 백엔드 부하를 감소하기 위해 캐시를 적용한 상태이다.
ㅇ 이번 글에서는 NGINX에서 특정 URL 패턴의 과도한 접근을 방어하기 위한 Rate Limiting 설정 방법을 정리해 보았다.
ㅁ Rate Limiting 설정
ㅇ NGINX의 Leaky Bucket 알고리즘 기반 요청 제한 기능을 활용해 서버 과부하를 방지한다.
ㅇ NGINX의 limit_req 디렉티브를 사용하여 특정 클라이언트가 일정 시간 내에 보낼 수 있는 요청 수를 제한할 수 있다.
ㅇ 이러한 속도 제한은 보안 목적으로 무차별 대입 공격(brute-force password guessing attack)의 속도를 늦추는 데 사용하기도 한다.
ㅁ 기본 속도 제한 구성
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location / {
limit_req zone=mylimit burst=5 nodelay;
limit_req_status 429; # Too Many Requests
proxy_pass http://my_upstream;
}
}
ㅇ rate: 초당 허용되는 요청 수
ㅇ burst: 추가로 허용 가능한 초과 요청 수
ㅇ nodelay: 버퍼 초과 시 즉시 429 에러 반환
ㅁ 테스트 방법
# MAC용
brew install siege
ㅇ siege 설치
siege -c 50 -t 30s http://yoursite.com # 부하 테스트

ㅇ 초당 1건(rate=1r/s )으로 설정하고 burst=2로 주어 2개의 버퍼를 허용하였다.
ㅇ 하지만 결과에 따라 초당 3개 이상이 처리되었다.
ㅇ 2건 이상부터는 2개의 버퍼에 따라 순차적으로 처리되었다.
ㅇ 예를 들어 지연률이 0.1초라면, 0.1초만에 10건을 요청하면 3건만 404가 발생하고 나머지는 409가된다.
ㅇ 0.1초마다 1건씩 10건 요청이 오면 8~9건 처리가 가능하였다.
ㅁ 함께 보면 좋은 사이트
'DevOps > nginx' 카테고리의 다른 글
[Nginx] NGINX에서 404 오류 발생 시 기본 파일 전달하기 (0) | 2025.04.12 |
---|---|
[Nginx] NGINX 보안 강화를 위한 기본 설정 (0) | 2025.03.22 |
[Nginx] Nginx 가상 호스팅 설정 (0) | 2025.03.20 |
[Nginx] Nginx 설정을 외부 파일로 관리하는 효율적인 방법 (0) | 2025.03.19 |
[Nginx] Nginx의 기본 이해와 주요 기능 (0) | 2025.03.18 |