웹 크롤러 제한

웹 크롤러 제한

내 웹사이트가 Google 스파이더의 DoS 공격을 받고 있습니다. Google은 내 사이트를 색인화하는 것을 환영하지만 때로는 내 웹 서버가 결과를 생성할 수 있는 것보다 더 빠르게 내 사이트의 태그 클라우드를 쿼리하여 내 웹 서버가 리소스를 소진하게 만듭니다.

일반 방문자가 영향을 받지 않도록 웹 서버에 대한 액세스를 어떻게 제한합니까?

robots.txt는 전체 사이트의 색인이 생성되는 것을 방지하므로 옵션이 아닙니다.

iptables -m recent일부 페이지에는 많은 이미지나 기타 데이터 파일이 있고 해당 페이지에 "최근" 트리거(일반적으로 이미지와 피드를 로드하는 RSS 수집기)도 있기 때문에 이는 까다롭습니다.

iptables -m limit동일한 단점이 있으며 가장 중요한 것은 각 IP 소스 주소를 선택할 수 없다는 것입니다.

과도한 서버 부하를 유발하는 방문자를 제한하는 방법은 무엇입니까?

VirtualBox VM의 Ubuntu 서버에서 apache2를 실행하고 있습니다.

답변1

시도 해봐mod_qos아파치 모듈. 현재 버전에는 다음과 같은 제어 메커니즘이 있습니다.

  • 위치/리소스(URL) 또는 가상 호스트에 대한 최대 동시 요청 수입니다.
  • 초당 허용되는 최대 URL 요청 수 또는 초당 다운로드되는 최대/최소 킬로바이트와 같은 대역폭 제한.
  • 초당 요청 이벤트 수를 제한합니다(특별 요청 조건). 또한 웹 서버에 대한 액세스가 제한되지 않거나 덜 제한된 VIP(Very 중요한 사람)를 "탐지"할 수도 있습니다.
  • 승인되지 않은 작업을 거부하는 일반 요청 라인 및 헤더 필터입니다.
  • 본문 데이터 제한 및 필터링을 요청합니다(mod_parp 필요).
  • 단일 IP 소스 주소에서 허용되는 최대 연결 수 또는 동적 연결 유지 제어와 같은 TCP 연결 수준 제한.
  • 서버에 사용 가능한 TCP 연결이 부족하면 잘 알려진 IP 주소가 선호됩니다.

문서에 있는 이 예제 조건부 규칙을 사용하면 올바른 방향으로 나아갈 수 있습니다.

# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch             "slurp"                  QS_Cond=spider
BrowserMatch             "googlebot"              QS_Cond=spider

# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider

관련 정보