Блокируем ботов по рефереру одним списком на весь сервер

Штатная дока по nginx предлагает нам метод valid_referers (одной строкой), однако это неудобно – ведь хочется записывать ботовые рефереры в файл построчно. Да и вообще – лучше автоматизировать это дело, добавляя их скриптом.

# /etc/nginx/blacklist.conf
map $http_referer $bad_referer {
    hostnames;
    default 0;
    "~bad-referer1.com" 1;
    "~bad-referer2.com" 1;
}

# /etc/nginx/nginx.conf
http {
  include blacklist.conf;
}

А затем в каждый блок server (вы ведь сделали общий файл-инклуд для них?) добавляем:

if ($bad_referer) { 
  return 403;
}

Проверяем:

curl -k --referer http://bad-referer1.com http://www.your-domain.com
curl -k --referer http://www.bad-referer1.com http://www.your-domain.com