nginx: bot/스크래퍼 차단 (map 기반)

User-Agent 패턴을 map으로 분류하고, 필요한 엔드포인트만 보수적으로 차단하는 방법

분야: DevOps/인프라 nginxbotsecurityrate-limit

의미 없는 봇 트래픽/스크래핑이 늘면, 서버 비용과 장애 확률이 같이 올라갑니다. “전면 차단”은 오탐이 많아질 수 있으니, 보통은 API/검색/로그인 같은 민감 엔드포인트부터 단계적으로 적용합니다.

관련 가이드: 봇 트래픽/어뷰징 대응 체크리스트 (nginx)

1) map으로 위험 User-Agent 플래그 만들기

map $http_user_agent $is_suspicious_ua {
  default 0;
  ~*(scrapy|python-requests|curl|wget) 1;
  ~*(headlesschrome|phantomjs) 1;
}

2) 특정 위치에서만 차단하기 (예: /api/)

location ^~ /api/ {
  if ($is_suspicious_ua) { return 403; }
  proxy_pass http://127.0.0.1:3000/;
}

3) rate limit과 같이 쓰기

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

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

체크리스트

  • 먼저 log_format/access log로 “누가 때리는지” 확인한 뒤 규칙을 만든다
  • 오탐을 고려해 “차단”보다 “완화(레이트 리밋)”부터 시작하는 경우가 많다
  • 앱에서도 인증/권한/쿼터 정책을 함께 둔다

같은 분야의 템플릿