nginx: bot/스크래퍼 차단 (map 기반)
User-Agent 패턴을 map으로 분류하고, 필요한 엔드포인트만 보수적으로 차단하는 방법
의미 없는 봇 트래픽/스크래핑이 늘면, 서버 비용과 장애 확률이 같이 올라갑니다. “전면 차단”은 오탐이 많아질 수 있으니, 보통은 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로 “누가 때리는지” 확인한 뒤 규칙을 만든다 - 오탐을 고려해 “차단”보다 “완화(레이트 리밋)”부터 시작하는 경우가 많다
- 앱에서도 인증/권한/쿼터 정책을 함께 둔다