Przejdź do głównej zawartości

Nie marnuj zasobów serwera: blokuj niechciane boty za pomocą Nginx

· 3 min aby przeczytać
Customer Care Engineer

block-unwanted-bots-using-nginx

Boty wyszukiwarek (crawlers) to specjalne programy, które skanują strony internetowe w Internecie. Wyszukiwarki potrzebują ich, aby znajdować, indeksować i wyświetlać strony w wynikach wyszukiwania. Ale nie wszystkie boty są przydatne!

Czasami Twoją witrynę mogą odwiedzać niechciane boty, które:

  • Zbierają dane bez Twojej zgody.
  • Zużywają zasoby serwera, spowalniając go.
  • Służą do wyszukiwania luk w zabezpieczeniach.

Jeśli chcesz chronić swoją witrynę przed takimi botami, czas skonfigurować Nginx! W tym artykule pokażemy, jak łatwo i szybko je zablokować, używając specjalnego pliku konfiguracyjnego.


Dlaczego konfiguracja Nginx zamiast pliku robots.txt?​

Plik robots.txt to narzędzie do zarządzania zachowaniem botów wyszukiwarek. Informuje je, które części witryny nie powinny być indeksowane. Bardzo łatwo jest użyć tego pliku: wystarczy utworzyć go w głównym katalogu witryny, na przykład:

User-agent: BadBot  

Disallow: /  

Istnieje jednak problem: instrukcje w pliku robots.txt są raczej zaleceniem niż obowiązującą zasadą. Sumienne boty przestrzegają instrukcji z tego pliku, ale większość botów po prostu je ignoruje.

Konfiguracja Nginx pozwala natomiast fizycznie zablokować dostęp niechcianym botom, gwarantując 100% skuteczności.


Jak Nginx blokuje niechciane boty: używanie odpowiedzi 444​

W przeciwieństwie do robots.txt, który jedynie udziela botom zaleceń, Nginx fizycznie blokuje ich dostęp. Jednym ze sposobów osiągnięcia tego celu jest użycie specjalnej odpowiedzi serwera z kodem 444.

W Nginx kod odpowiedzi 444 jest wewnętrzną metodą zakończenia połączenia z klientem bez wysyłania żadnej odpowiedzi. Jest to wydajne podejście do ignorowania niechcianych żądań i minimalizowania obciążenia serwera.


Konfigurowanie blokowania​

Krok 1: Jak zidentyfikować niechciane boty?​

Niechciane boty można zidentyfikować po ich User-Agent, który jest parametrem wysyłanym przez wszystkich klientów podczas odwiedzania Twojej witryny. Na przykład niektóre User-Agent mogą wyglądać tak:

    AhrefsBot     SemrushBot     MJ12bot

Podejrzane wartości User-Agent można znaleźć w logach dostępu Nginx (jeśli Twoja witryna używa PHP-FPM):

sudo grep -i bot /var/log/nginx/access.log

Lub w logach dostępu Apache (jeśli Twoja witryna używa modułu Apache lub FastCGI jako procedury obsługi PHP):

  • Dla Ubuntu/Debian:
sudo grep -i bot /var/log/apache2/access.log
  • Dla CentOS/AlmaLinux/RockyLinux:
sudo grep -i bot /var/log/httpd/access.log

Jeśli używasz panelu sterowania, takiego jak FASTPANEL, każda witryna będzie miała swój własny, oddzielny plik logów. Możesz analizować je pojedynczo lub wszystkie naraz, używając polecenia takiego jak:

  • Jeśli Twoja witryna używa modułu Apache lub FastCGI jako procedury obsługi PHP:
sudo cat /var/www/*/data/logs/*-backend.access.log |  grep -i bot | tail -500
  • Jeśli Twoja witryna używa PHP-FPM:
sudo cat /var/www/*/data/logs/*-frontend.access.log |  grep -i bot | tail -500

To polecenie wyświetli ostatnie 500 żądań wysłanych do wszystkich Twoich witryn, gdzie parametr User-Agent zawiera słowo „bot”. Przykład jednej linii (jednego żądania do Twojej witryny) może wyglądać tak:

IP - [03/Nov/2022:10:25:52 +0300] "GET link HTTP/1.0" 301 811 "-" "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; [email protected])"

lub

IP - [24/Oct/2022:17:32:37 +0300] "GET link HTTP/1.0" 404 469 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"

User-Agent bota znajduje się między segmentami “compatible;” a “/version.number“ na końcu linii żądania w nawiasach. Zatem w powyższych przykładach User-agents to: BLEXBot i DotBot.

Przeanalizuj zebrane informacje i zanotuj ciągi User-Agent najaktywniejszych botów na potrzeby następnego kroku konfiguracji blokowania.

Krok 2: Utwórz plik do blokowania botów​

  1. Połącz się ze swoim serwerem przez SSH.
  2. Przed wprowadzeniem zmian upewnij się, że Twoja bieżąca konfiguracja Nginx nie zawiera błędów:
nginx -t

Jeśli wszystko jest w porządku, zobaczysz:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Jeśli wystąpiły błędy, przejrzyj je i popraw w pliku wskazanym przez komunikaty o błędach.

  1. Utwórz osobny plik z listą botów do zablokowania:
sudo nano /etc/nginx/conf.d/block_bots.conf

Dodaj następujący kod do pliku:

    map $http_user_agent $block_bot {

        default 0;

        ~*AhrefsBot 1;

        ~*SemrushBot 1;

        ~*MJ12bot 1;

    }



    server {

        if ($block_bot) {

            return 444;

        }
    }

Tutaj tworzymy mapę, która określa, które boty powinny zostać zablokowane.

Postępując zgodnie z tym wzorem, wymień ciągi User-Agent botów, które chcesz zablokować. Każdego bota należy umieścić w nowej linii i zakończyć średnikiem ; jako separatorem.

Po zakończeniu tworzenia listy naciśnij klawisze „Ctrl + O”, aby zapisać plik, a następnie „Ctrl + X”, aby wyjść z edytora nano.

Krok 3: Zastosuj zmiany​

Po dokonaniu zmian zawsze przetestuj poprawność konfiguracji Nginx, aby upewnić się, że nie ma błędów składniowych:

sudo nginx -t

Jeśli wszystko jest w porządku, zobaczysz:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Jeśli wystąpiły błędy, przejrzyj wyniki, aby zidentyfikować je i poprawić w określonym pliku.

Następnie przeładuj konfigurację Nginx, aby zastosować zmiany:

sudo systemctl reload nginx

W przyszłości, jeśli chcesz dodać więcej botów do pliku block_bots.conf, musisz powtórzyć ten krok za każdym razem.


Wnioski​

Teraz wiesz, jak łatwo blokować niechciane boty wyszukiwarek na swoim serwerze za pomocą Nginx! Obserwuj swoje logi i w razie potrzeby dodawaj nowe linie do pliku konfiguracyjnego block_bots.conf.

Upewnij się, że blokujesz tylko złośliwe boty, aby nie utrudniać indeksowania witryny przez pożyteczne wyszukiwarki, takie jak Google czy Bing.