dilikpulatov
@dilikpulatov
веб-программист

Как заблокировать определенные боты в Nginx?

Добрый день!
Мне нужно блокировать все боты кроме поисковые боты или боты соц.сета
например нужно пропустить боты Google, Yandex, Yahoo и т.д и нужно чтобы ссылки моего сайта работал в соц.сетях. Имею в виду это когда ссылку вставляю в соц.сетах, по моему бот соц.сета берут данные из моего сайта(title, descriptions и т.д)
Например это в телеграме вот так работает
5e33cd8b94af4358135762.jpeg
это по моему боты делают так?

А остальные боты нужно блокировать....так как из-за эти боты на сервер идет большая нагрузка...и иногда сервер падает
В Nginx понят не имею как это сделать. Помогите пожалуйста(с примером если можно).
В стековерфлов нашол такое но говорят что это и блокирует поисковые боты
map $http_user_agent $limit_bots {
     default 0;
     ~*(google|bing|yandex|msnbot) 1;
     ~*(AltaVista|Googlebot|Slurp|BlackWidow|Bot|ChinaClaw|Custo|DISCo|Download|Demon|eCatch|EirGrabber|EmailSiphon|EmailWolf|SuperHTTP|Surfbot|WebWhacker) 1;
     ~*(Express|WebPictures|ExtractorPro|EyeNetIE|FlashGet|GetRight|GetWeb!|Go!Zilla|Go-Ahead-Got-It|GrabNet|Grafula|HMView|Go!Zilla|Go-Ahead-Got-It) 1;
     ~*(rafula|HMView|HTTrack|Stripper|Sucker|Indy|InterGET|Ninja|JetCar|Spider|larbin|LeechFTP|Downloader|tool|Navroad|NearSite|NetAnts|tAkeOut|WWWOFFLE) 1;
     ~*(GrabNet|NetSpider|Vampire|NetZIP|Octopus|Offline|PageGrabber|Foto|pavuk|pcBrowser|RealDownload|ReGet|SiteSnagger|SmartDownload|SuperBot|WebSpider) 1;
     ~*(Teleport|VoidEYE|Collector|WebAuto|WebCopier|WebFetch|WebGo|WebLeacher|WebReaper|WebSauger|eXtractor|Quester|WebStripper|WebZIP|Wget|Widow|Zeus) 1;
     ~*(Twengabot|htmlparser|libwww|Python|perl|urllib|scan|Curl|email|PycURL|Pyth|PyQ|WebCollector|WebCopy|webcraw) 1;
 } 

location / {
  if ($limit_bots = 1) {
    return 403;
  }
}
  • Вопрос задан
  • 1635 просмотров
Решения вопроса 1
PageAuditRU
@PageAuditRU
Senior SEO Анализатор
map $http_user_agent $limit_bots {
     default 0;
     ~*(AltaVista|BlackWidow|Bot|ChinaClaw|Custo|DISCo|Download|Demon|eCatch|EirGrabber|EmailSiphon|EmailWolf|SuperHTTP|Surfbot|WebWhacker) 1;
     ~*(Express|WebPictures|ExtractorPro|EyeNetIE|FlashGet|GetRight|GetWeb!|Go!Zilla|Go-Ahead-Got-It|GrabNet|Grafula|HMView|Go!Zilla|Go-Ahead-Got-It) 1;
     ~*(rafula|HMView|HTTrack|Stripper|Sucker|Indy|InterGET|Ninja|JetCar|Spider|larbin|LeechFTP|Downloader|tool|Navroad|NearSite|NetAnts|tAkeOut|WWWOFFLE) 1;
     ~*(GrabNet|NetSpider|Vampire|NetZIP|Octopus|Offline|PageGrabber|Foto|pavuk|pcBrowser|RealDownload|ReGet|SiteSnagger|SmartDownload|SuperBot|WebSpider) 1;
     ~*(Teleport|VoidEYE|Collector|WebAuto|WebCopier|WebFetch|WebGo|WebLeacher|WebReaper|WebSauger|eXtractor|Quester|WebStripper|WebZIP|Wget|Widow|Zeus) 1;
     ~*(Twengabot|htmlparser|libwww|Python|perl|urllib|scan|Curl|email|PycURL|Pyth|PyQ|WebCollector|WebCopy|webcraw) 1;
 } 

location / {
  if ($limit_bots = 1) {
    return 403;
  }
}

Прямо сейчас занимаюсь аналогичной проблемой.
Вот такой вариант грубо отсечёт много (но не всех) ботов.
Если бот не сообщит в User-Agent своё имя, а прикинется обычным пользователем, то эта схема его не остановит. Нужно будет анализировать его поведенческие факторы, но это уже не сделать на уровне NGINX.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@to_east
на PHP решение: https://github.com/JayBizzle/Crawler-Detect. Но если нужно чисто на нгинкс тогда наверное лучше https://openresty.org/ поставить с Луа будет проще чем в конфигах, имхо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы