Limitando os rastreadores da web

8

Meu website está sendo doado pelos webspiders do Google. O Google é bem-vindo a indexar meu site, mas às vezes ele está consultando um tagcloud no meu site mais rápido do que o meu servidor da Web pode produzir os resultados, fazendo com que meu servidor fique sem recursos.

Como posso limitar o acesso ao meu servidor da Web de forma que os visitantes normais não sejam afetados?

O robots.txt não é uma opção, pois bloquearia todo o site de ser indexado.

iptables -m recent é complicado, porque algumas páginas têm muitas imagens ou outros arquivos de dados e gatilhos 'recentes' também (geralmente meu agregador RSS, carregando imagens e feeds).

iptables -m limit tem a mesma desvantagem e, além disso, não consegui ser seletivo por endereço de origem IP.

Como posso limitar os visitantes que causam o aumento da carga do meu servidor?

Estou executando o apache2 no servidor Ubuntu em uma VM do VirtualBox.

    
por jippie 27.04.2012 / 21:06

1 resposta

5

Experimente o módulo mod_qos do Apache. A versão atual tem os seguintes mecanismos de controle.

  • O número máximo de solicitações simultâneas para um local / recurso (URL) ou host virtual.
  • Limitação da largura de banda, como o número máximo permitido de solicitações por segundo para um URL ou o máximo / mínimo de download kbytes por segundo.
  • Limita o número de eventos de solicitação por segundo (solicitação especial condições). Pode também "detectar" pessoas muito importantes (VIP) que pode acessar o servidor da web sem ou com menos restrições.
  • Linha genérica de solicitação e filtro de cabeçalho para negar a desautorização operações.
  • Solicitar limitação e filtragem de dados do corpo (requer mod_parp).
  • Limitações no nível da conexão TCP, por exemplo, o número máximo de conexões permitidas de um único endereço de origem IP ou dinâmico controle keep-alive.
  • Prefere endereços IP conhecidos quando o servidor fica sem TCP livre conexões.

Esta regra condicional de amostra da documentação deve levá-lo na direção certa.

# 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
    
por 27.04.2012 / 21:20