Wiki-Performance

22 May 2017 - 16:41 | Version 5 |

Problem

Der Wikiserver verbraucht relativ viele Ressourcen, um eine Wikiseite darzustellen. Werden zu viele Seiten gleichzeitig abgefragt, so geht der Server in die Knie, weil er ins Swappen kommt und sich davon nicht mehr erholt. Meist sind es unerwünschte Spider, die burstartig innert kürzester Zeit massiv viele Seiten abrufen.

Man kann dieses Problem auf zwei Arten entschärfen: Dem Server mehr Ressourcen geben oder dafür sorgen, dass nicht mehr Ressourcen gebraucht werden, als zur Verfügung stehen.

Es gibt prinzipiell vier Massnahmen, um die Systemlast zu beschränken:

  • Caching: Foswiki verfügt über verschiedene Cachingmöglichkeiten. Damit muss nicht jede Seite bei jedem Aufruf frisch generiert werden, sondern bereits generierte Seiten können ressourcenschonend aus dem Cachespeicher abgerufen werden.
  • mod_cgi: Statt das Apache jedes Mal eine perl-Instanz starten muss, wird perl direkt in apche eingebunden
  • robots.txt: Braven Suchmaschinen kann man mitteilen, welche Seiten sie nicht abrufen sollen und wie viel Zeit sie zwischen zwei Seitenabrufen verstreichen lassen sollen.
  • Filtern: Letztendlich kann man versuchen, bösartige Abrufe zu verhindern, indem man sie blockt, bevor sie zu viele Ressourcen verbrauchen.

Caching

https://foswiki.org/System/PageCaching

mod_cgi

...

robots.txt

Braven Suchmaschinen kann man in der Datei robots.txt mitteilen, welche Verzeichnisse und Seiten sie nicht abrufen sollen und wie viel Zeit sie zwischen zwei Seitenabrufen verstreichen lassen sollen.

Am 21.05.2017 sah robots.txt auf meinem Wiki-Server folgendermassen aus:
User-agent: *
Crawl-Delay: 15
Disallow: /ich-will-keine-bots
Disallow: /Applications
Disallow: /System
Disallow: /Sandbox
Disallow: /Main
Disallow: /Main/WebCreateNewTopic
Disallow: /bin/attach
Disallow: /bin/changes
Disallow: /bin/compare
Disallow: /bin/configure
Disallow: /bin/edit
Disallow: /bin/geturl
Disallow: /bin/installpasswd
Disallow: /bin/login
Disallow: /bin/logon
Disallow: /bin/logos
Disallow: /bin/mailnotify
Disallow: /bin/manage
Disallow: /bin/oops
Disallow: /bin/passwd
Disallow: /bin/preview
Disallow: /bin/rdiff
Disallow: /bin/rdiffauth
Disallow: /bin/register
Disallow: /bin/rename
Disallow: /bin/resetpasswd
Disallow: /bin/rest
Disallow: /bin/save
Disallow: /bin/savemulti
Disallow: /bin/search
Disallow: /bin/setlib.cfg
Disallow: /bin/statistics
Disallow: /bin/testenv
Disallow: /bin/upload
Disallow: /bin/viewauth
Disallow: /bin/viewfile
Disallow: /list/

...

Filtern

Spidertrap

Man kann versuchen, Computer, die sich nicht an robots.txt halten, automatisiert zu erkennen und zu sperren. Dies macht die Spidertrap: Hinter einer URL, die per robots.txt verboten wird, versteckt sich ein Skript, das automatisch jede IP-Adresse, welche diese URL abruft, in .htaccess als verbotene IP-Adresse aufnimmt. Damit kann ein bösartiger Spider zwar anfangen, das Wiki abzugrasen, wird sich aber über kurz oder lang in der Spidertrap verheddern und ausgeschlossen werden.

Ich verwende zu diesem Zweck http://www.spider-trap.de/

IPs sperren

mod_qos

mod_qos ist Apache-Modul mit dem sich Zugriffe aufgrund verschiedener Kriterien beschränken lassen.

am 21.05.2017 sah die mod_qos Konfiguration folgendermassen aus:
<IfModule qos_module>

  # detect search engines:
  BrowserMatch             "slurp"                  QS_Cond=spider
  BrowserMatch             "googlebot"              QS_Cond=spider
  BrowserMatch             "Baiduspider"            QS_Cond=spider
  BrowserMatch             "AhrefsBot"              QS_Cond=spider
  BrowserMatch             "YisouSpider"            QS_Cond=spider
  BrowserMatch             "SEOkicks-Robot"         QS_Cond=spider
  BrowserMatch             "HaosouSpider"           QS_Cond=spider
  BrowserMatch             "MJ12bot"                QS_Cond=spider

  # set limit for spiders
  QS_LocRequestLimitDefault         200

  # set limit for spiders
  QS_CondLocRequestLimitMatch   "^/.*$"  10     spider

  # limits concurrent requests to the location /Blog
  QS_LocRequestLimit            /Blog                 20
  QS_LocRequestLimit            /NKSA                 5
  QS_LocRequestLimit            /NIEBhutan            5

</IfModule>

Bekannte bad bots

Datenbanken böser bots

BLEXBot (2017-05-21)

360Spider (2017-05-21)

107.150.49.58 (2017-05-21)

-- BeatDoebeli - 21 May 2017
This site is powered by FoswikiCopyright © by the contributing authors. All material on this site is the property of the contributing authors.
Ideas, requests, problems regarding wiki.doebe.li? Send feedback