nginx에서 봇/abuse 트래픽 대응하기
UA 차단(map), rate limit, 캐시로 비용을 줄이고 서비스 안정성을 올리는 실전 패턴
운영에서 트래픽은 “성장”이기도 하지만, “공격/스크래핑/오류 크롤러”이기도 합니다. 특히 정적/검색 기반 사이트는 봇 트래픽이 빠르게 늘 수 있습니다.
1) 기본 접근: 단계적으로 적용
- 관측부터: 어떤 경로가, 어떤 UA/IP로, 얼마나 때리는가
- 부하가 큰 엔드포인트부터 보호: 로그인/검색/상세 API
- 룰을 좁게 적용: 오탐을 줄이고 점진적으로 확대
관련 용어: 로깅(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 캐시가 비용을 크게 줄입니다.