Étrangler les robots Web

Mon site Web est en train d'être piraté par Google Webspiders. Google est le bienvenu pour indexer mon site, mais parfois il interroge un tagcloud sur mon site plus rapidement que mon server Web peut produire les résultats, ce qui rend mon server web à court de ressources.

Comment puis-je limiter l'access à mon server web de façon à ce que les visiteurs normaux ne soient pas affectés?

Le file robots.txt n'est pas une option car il bloquerait tout le site d'être indexé.

iptables -m recent est délicat, car certaines pages contiennent beaucoup d'images ou d'autres files de données, ainsi que des triggersurs récents (généralement mon agrégateur RSS, qui charge des images et des stream).

iptables -m limit a le même inconvénient et en plus de cela, je n'ai pas pu être sélectif par adresse IP source.

Comment puis-je limiter les visiteurs qui causent une charge trop élevée de mon server?

Je cours Apache2 sur le server Ubuntu dans une VM VirtualBox.

Essayez le module mod_qos Apache. La version actuelle a les mécanismes de contrôle suivants.

  • Nombre maximal de requests simultanées vers un location / une ressource (URL) ou un hôte virtuel.
  • Limitation de la bande passante telle que le nombre maximum autorisé de requêtes par seconde à une URL ou le maximum / minimum de kilo-octets téléchargés par seconde.
  • Limite le nombre d'events de requête par seconde (conditions de requête spéciales). Il peut également «détecter» des personnes très importantes (VIP) qui peuvent accéder au server Web sans ou avec less de ressortingctions.
  • Ligne de requête générique et filter d'en-tête pour interdire les opérations non autorisées.
  • Demande de limitation des données du corps et de filtrage (nécessite mod_parp).
  • Limitations du niveau de connection TCP, par exemple, le nombre maximal de connections autorisées à partir d'une seule adresse source IP ou d'un contrôle keep-alive dynamic.
  • Préfère les adresses IP connues lorsque le server est à court de connections TCP libres.

Cet exemple de règle conditionnelle de la documentation devrait vous permettre d'aller dans la bonne direction.

 # 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