nginx: Bots/Browserkennungen sperren

Warning: This page is a part of an archive now and will be removed in the future.

Bekanntlich nutzt nginx keine .htaccess-Dateien, um die Performance stets hoch zu halten. Aus diesem Grunde gestaltet sich auch das Sperren bestimmter Browserkennungen von z.B. Bots etwas anders, kann aber über eine einfache if-Abfrage in der Konfiguration erreicht werden.

Jeder Besucher auf einer Webseite liefert eine Browserkennung (auch User Agent), die eine einfache Zeichenkette ist und bestimmte Informationen enthält. Auch Bots haben oftmals eine eindeutige Kennung und können daher auch blockiert werden. Für die Blockierung nutzen wir einfach eine "Zugriff verweigert"-Meldung, die über den HTTP-Statuscode 403 erreicht wird.

Eine Abfrage nach einer Browserkennung sieht in der Konfigurationsdatei von nginx folgendermaßen aus:

Source Code

  1. if ($http_user_agent ~* useragent) {
  2. // what happens?
  3. }
Hierbei wird alles innerhalb der geschweiften Klammern auf Besucher angewendet, welche innerhalb ihrer Browserkennung die Zeichenkette "useragent", egal in welcher Konstellation von Groß- und Kleinschreibung, nutzen.

Den Statuscode 403 übergibt man dann einfach an diese Besucher mit return: 403;, was dann insgesamt folgendermaßen aussieht:

Source Code

  1. if ($http_user_agent ~* useragent) {
  2. return 403;
  3. }
Wer möchte, kann auch mehrere Browserkennungen innerhalb von einer if-Abfrage sperren. Da alles hinter dem ~-Zeichen als regulärer Ausdruck interpretiert wird (das direkt anschließende Asterisk-Zeichen * gibt an, dass die Groß-/Kleinschreibung nicht beachtet werden soll), kann man hier auch reguläre Ausdrücke nutzen. Ein useragent|browserkennung schließt dann z.B. die Zeichenketten "useragent" und "browserkennung" aus. Das |-Zeichen fungiert hier als "oder". Dies kann man einfach so weiterführen, so dass das Ganze auch so aussehen kann:

Source Code

  1. if ($http_user_agent ~* useragent|browserkennung|wget|spider|robot) {
  2. return 403;
  3. }
Nach der Änderung der Konfigurationsdatei muss selbige nur neu von nginx geladen werden:
service nginx reload

Meiner Meinung nach bietet es sich an, die Abfrage in eine separate Datei zu speichern, z.B. unter /etc/nginx/blocked_bots und dann in jedem benötigten vHost zu inkludieren:
include /etc/nginx/blocked_bots;.
About the Author
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

484 times read

Comments 0

There are not any items at the moment.

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.