관리 메뉴

피터의 개발이야기

[Nginx] NGINX Rate Limiting & 동적 IP 차단 가이드 본문

DevOps/nginx

[Nginx] NGINX Rate Limiting & 동적 IP 차단 가이드

기록하는 백앤드개발자 2025. 4. 11. 03:01
반응형

ㅁ 들어가며

[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건 처리가 가능하였다. 

 

ㅁ 함께 보면 좋은 사이트

NGINX를 사용한 속도 제한

 

반응형
Comments