Как можно блокировать ботов в nginx?

Пользователь

от brenna , в категории: Другие , 9 месяцев назад

Как можно блокировать ботов в nginx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от elda , 9 месяцев назад

@brenna 

Существует несколько способов блокировки ботов в Nginx. Один из способов - использование файла с правилами блокировки (blacklist) и конфигурации Nginx.


Вот пример конфигурации Nginx для блокировки ботов:

  1. Создайте файл с правилами блокировки (например, "bot_blacklist.conf") в директории с конфигурацией Nginx: nano /etc/nginx/bot_blacklist.conf
  2. Внутри этого файла добавьте правила блокировки для ботов. Ниже приведены примеры правил, которые можно использовать для блокировки известных ботов: # Правила блокировки ботов if ($http_user_agent ~* (MJ12bot|SemrushBot|AhrefsBot)) { return 403; } В этом примере блокируются боты MJ12bot, SemrushBot и AhrefsBot. Можно добавить или изменить эти правила в соответствии с вашими потребностями.
  3. Добавьте следующую строку в конфигурацию сервера Nginx (в файле nginx.conf или в соответствующем файле в директории "sites-available"): include /etc/nginx/bot_blacklist.conf; Эта строка добавляет ранее созданный файл с правилами блокировки в конфигурацию сервера.
  4. Перезапустите Nginx для применения изменений: systemctl restart nginx


Теперь Nginx будет блокировать запросы от ботов, соответствующих заданным правилам, и возвращать код ответа 403 (Forbidden).

Пользователь

от ella , месяц назад

@brenna 

Добавить к вышеприведенным действиям:


Еще один способ блокировки ботов в Nginx - использование модуля ngx_http_geoip_module для блокировки по странам. Для этого необходимо установить GeoIP базу данных и модуль.

  1. Установите модуль ngx_http_geoip_module.
  2. Скачайте и установите GeoIP базу данных (например, GeoLite2 Country) в директорию /etc/nginx/.
  3. Внесите изменения в файл конфигурации Nginx (например, nginx.conf) для использования модуля ngx_http_geoip_module и GeoIP базы данных:
1
2
3
4
5
geoip_country /etc/nginx/GeoIP.dat;
map $geoip_country_code $allowed_country {
  default yes;
  RU no;
}


  1. Далее, добавьте проверку в вашу конфигурацию, чтобы блокировать запросы из определенных стран:
1
2
3
4
5
6
7
8
server {
  location / {
    if ($allowed_country = no) {
      return 403;
    }
    # Другие настройки вашего сервера
  }
}


  1. Перезапустите Nginx для применения изменений:
1
systemctl restart nginx


Теперь Nginx будет блокировать запросы с IP-адресов из России, так как они помечены как "no" в рамках настроенной карты. Можно дополнить этот пример другими странами или кастомизировать для более точной блокировки по географии.