nginx에서 봇/abuse 트래픽 대응하기

UA 차단(map), rate limit, 캐시로 비용을 줄이고 서비스 안정성을 올리는 실전 패턴

분야: DevOps/인프라 시리즈: Nginx nginxrate-limitbotsecurityperformance

운영에서 트래픽은 “성장”이기도 하지만, “공격/스크래핑/오류 크롤러”이기도 합니다. 특히 정적/검색 기반 사이트는 봇 트래픽이 빠르게 늘 수 있습니다.

1) 기본 접근: 단계적으로 적용

  1. 관측부터: 어떤 경로가, 어떤 UA/IP로, 얼마나 때리는가
  2. 부하가 큰 엔드포인트부터 보호: 로그인/검색/상세 API
  3. 룰을 좁게 적용: 오탐을 줄이고 점진적으로 확대

관련 용어: 로깅(Logging), 메트릭(Metrics)

2) UA 기반 차단 (map)

map $http_user_agent $is_bad_bot {
  default 0;
  ~* (?:semrush|ahrefs|mj12bot|curl|python-requests) 1;
}

server {
  # ...
  if ($is_bad_bot) { return 403; }
}

※ 실서비스에서는 “좋은 봇(검색엔진)”까지 막지 않도록, 목록을 신중히 관리합니다.

3) rate limit으로 폭주 막기

limit_req_zone $binary_remote_addr zone=api_rl:10m rate=5r/s;

server {
  location /api/ {
    limit_req zone=api_rl burst=20 nodelay;
    proxy_pass http://127.0.0.1:3000/;
  }
}

4) 정적 자산 캐시(비용 절감)

해시 기반 정적 자산(/_astro/ 등)은 immutable 캐시가 비용을 크게 줄입니다.

관련 문서: nginx: 정적 사이트 + SSL + HTTP→HTTPS

관련 가이드