Przejdź do głównej zawartości

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

· 3 min aby przeczytać
Customer Care Engineer

blokowanie-niechcianych-botów-za-pomocą-nginx

Boty wyszukiwarek (crawlers) to specjalne programy, które indeksują strony w Internecie. Są one potrzebne wyszukiwarkom do znajdowania, indeksowania i wyświetlania stron w wynikach wyszukiwania. Jednak nie wszystkie boty są pożyteczne!

Niektóre niechciane boty mogą:

  • Zbierać dane bez twojej zgody.
  • Nadmiernie obciążać serwer, powodując spowolnienia.
  • Szukać luk w zabezpieczeniach twojej witryny.

Jeśli chcesz ochronić swoją witrynę przed takimi botami, czas skonfigurować Nginx! Pokażemy ci, jak szybko i skutecznie je zablokować, wykorzystując odpowiednie ustawienia.


Po co konfigurować Nginx, jeśli istnieje plik robots.txt?

Plik robots.txt to narzędzie umożliwiające kontrolowanie zachowania botów wyszukiwarek. Pozwala określić, które strony nie powinny być przez nie indeksowane. Korzystanie z tego pliku jest bardzo proste, wystarczy w katalogu głównym witryny utworzyć plik typu:

User-agent: BadBot  

Disallow: /  

Jest jednak istotny problem: zawartość pliku robots.txt ma jedynie charakter zalecenia, a nie obowiązującej reguły. Rzetelne boty respektują ten plik, ale wiele z nich po prostu go ignoruje.

Konfiguracja z Nginx, w przeciwieństwie do robots.txt, pozwala fizycznie zablokować dostęp niechcianym botom, co gwarantuje rezultaty w 100% przypadków. 


Jak Nginx blokuje niechciane boty: użycie odpowiedzi 444

W przeciwieństwie do pliku robots.txt, który jedynie sugeruje botom, jak się zachowywać, Nginx umożliwia fizyczne blokowanie ich dostępu. Jednym ze sposobów na osiągnięcie tego celu jest wykorzystanie specjalnej odpowiedzi serwera o kodzie 444.

Kod odpowiedzi 444 — to wewnętrzny mechanizm Nginx, który zamyka połączenie z klientem bez wysyłania żadnej odpowiedzi. Jest to skuteczna metoda ignorowania niechcianych zapytań i minimalizowania obciążenia serwera.


Konfiguracja blokady

Krok 1: Jak rozpoznać niechciane boty?

Niechciane boty można zidentyfikować na podstawie ich User-Agent, czyli parametru przesyłanego przez każdego klienta odwiedzającego stronę. Dla przykładu, niektóre z nich wyglądają tak:

    AhrefsBot     SemrushBot     MJ12bot

Aby znaleźć podejrzane User-Agent w logach dostępowych Nginx (jeśli twoja witryna korzysta z PHP-FPM), możesz użyć komendy:

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

W przypadku logów Apache (jeśli witryna używa modułu Apache lub FastCGI jako interpretera PHP), użyj:

  • 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 korzystasz z panelu sterowania, takiego jak FASTPANEL, każda witryna będzie miała swój własny oddzielny plik logów. Można je analizować osobno lub wszystkie naraz za pomocą polecenia typu:

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

Powyższe polecenia wyświetlą 500 ostatnich zapytań do wszystkich twoich stron, gdzie parametr User-Agent zawiera słowo bot. Przykładowy wpis z logów 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ę pomiędzy fragmentami “compatible;” i “/numer.wersji“ w nawiasach. Tak więc w powyższych przykładach User-agent to „BLEXBot” i „DotBot”.

Przeanalizuj uzyskane informacje i zapisz User-agent najbardziej aktywnych botów w celu dalszych ustawień blokowania. 

Krok 2: Tworzenie pliku blokady botów

  1. Połącz się z serwerem przez SSH.
  2. Przed przystąpieniem do pracy upewnij się, że w bieżącej konfiguracji Nginx nie ma żadnych błędów:
nginx -t

Jeśli wszystko jest w porządku, otrzymasz odpowiedź:

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

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

Jeśli w danych wyjściowych występują błędy, zapoznaj się z ich zawartością i popraw je w pliku, na który wskazują.

  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;

        }
*reszta bloku serwer*
    }

Tutaj tworzymy mapę, która określa, który bot powinien zostać zablokowany.

Analogicznie, wymień User-agent botów, które chcesz zablokować. Każdy bot powinien być wymieniony w nowym wierszu, a na końcu wiersza należy podać znak; jako separator.

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

Krok 3: Zastosowanie zmian

Po wprowadzeniu zmian w konfiguracji należy sprawdzić poprawność konfiguracji Nginx, aby upewnić się, że nie zawiera błędów składniowych:

sudo nginx -t

Jeśli wszystko jest w porządku, otrzymasz odpowiedź:

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

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

Jeśli w danych wyjściowych występują błędy, zapoznaj się z ich zawartością i popraw je w pliku, na który wskazują.

Następnie załaduj ponownie konfigurację Nginx, aby zastosować wprowadzone zmiany:

sudo systemctl reload nginx

Jeśli w przyszłości będziesz chciał dodać nowych botów do pliku block_bots.conf,musisz każdorazowo powtórzyć powyższy krok. 


Podsumowanie

Teraz wiesz, jak łatwo zablokować niechciane boty na swoim serwerze za pomocą Nginx!  Monitoruj logi i w razie potrzeby dodawaj nowe boty do pliku block_bots.conf.

Pamiętaj, aby blokować tylko szkodliwe boty, aby nie zaszkodzić indeksowaniu swojej witryny w użytecznych wyszukiwarkach, takich jak Google czy Bing.