Drosseln von Webcrawlern

8

Meine Website wird von Google Webspiders erstellt. Google kann meine Website gerne indizieren, aber manchmal wird eine Tagcloud auf meiner Website schneller abgefragt, als mein Webserver die Ergebnisse liefern kann, sodass meinem Webserver die Ressourcen ausgehen.

Wie kann ich den Zugriff auf meinen Webserver so einschränken, dass normale Besucher nicht betroffen sind?

robots.txt ist keine Option, da dadurch die Indizierung der gesamten Site blockiert wird.

iptables -m recent ist schwierig, da einige Seiten viele Bilder oder andere Datendateien enthalten und auch "aktuelle" Trigger auf diesen (normalerweise mein RSS-Aggregator, Laden von Bildern und Feeds).

iptables -m limit hat den gleichen Nachteil und außerdem konnte ich nicht pro IP-Quelladresse selektiv sein.

Wie kann ich Besucher begrenzen, die dazu führen, dass meine Serverlast zu hoch steigt?

Ich verwende Apache2 auf einem Ubuntu-Server in einer VirtualBox-VM.

Jippie
quelle
1
Sie können Webmaster-Tools verwenden, um die Crawling-Rate zu senken. Siehe support.google.com/webmasters/bin/…
derobert

Antworten:

5

Probieren Sie das Apache-Modul mod_qos aus . Die aktuelle Version verfügt über die folgenden Steuerungsmechanismen.

  • Die maximale Anzahl gleichzeitiger Anforderungen an einen Standort / eine Ressource (URL) oder einen virtuellen Host.
  • Begrenzung der Bandbreite, z. B. die maximal zulässige Anzahl von Anforderungen pro Sekunde an eine URL oder die maximale / minimale Anzahl heruntergeladener KByte pro Sekunde.
  • Begrenzt die Anzahl der Anforderungsereignisse pro Sekunde (spezielle Anforderungsbedingungen). Es kann auch sehr wichtige Personen (VIP) "erkennen", die ohne oder mit weniger Einschränkungen auf den Webserver zugreifen können.
  • Generischer Anforderungszeilen- und Headerfilter, um nicht autorisierte Vorgänge zu verweigern.
  • Beschränkung und Filterung von Körperdaten anfordern (erfordert mod_parp).
  • Einschränkungen auf der TCP-Verbindungsebene, z. B. die maximal zulässige Anzahl von Verbindungen von einer einzelnen IP-Quelladresse oder die dynamische Keep-Alive-Steuerung.
  • Bevorzugt bekannte IP-Adressen, wenn der Server keine freien TCP-Verbindungen mehr hat.

Diese Beispiel-Bedingungsregel aus der Dokumentation soll Sie in die richtige Richtung bringen.

# 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
George M.
quelle
Sieht etwas komplizierter aus, als ich es mir an einem Freitagabend erhofft hatte, belgisches Bier zu genießen ... Ich muss es mir morgen ansehen. Sieht mit dem Browsermatch und den Dingen vielversprechend aus. Wenn ich daran denke ... wäre es schön, wenn es automatisch einen Host / Useragent gibt, der robot.txt anfordert: o) Danke Uther
jippie
Genieße das Bier!
George M
OK, es sieht ziemlich einfach aus. Implementiert, um zu sehen, ob mein Webserver jetzt mithalten kann.
Jippie