Nginx и блокировка пользователей

Иногда возникает необходимость быстро заблокировать каких-то пользователей средствами веб-сервера по некоторому признаку: User Agent, IP-адрес и т.д.

Поможет вот такая штука.

Создаем файл /etc/nginx/block.conf

# Block unwanted users

# Blocking by User Agent (блокировка по юзер-агенту)
# Хорошо подходит для блокировки роботов
if ($http_user_agent ~ (ZmEu|libwww-perl|wget) ) {
    return 403;
    }

# Blocking by IP address (блокировка по ИП-адресу)
deny 88.88.88.88;

# Blocking by IP subnet (блокировка подсети)
deny 192.168.10.0/24;

# Blocking by Referer (блокировка по рефереру, т.е. адресу откуда пользователь перешел на мой сайт)
if ($http_referer ~* (viagra|cialis|levitra) ) {
	return 403;
	}

# Blocking by GeoIP (блокировка по географическому признаку)
geoip_country /etc/nginx/GeoIP.dat;
if ($geoip_country_code ~ (BR|CN|KR|RU) ) {
	return 403;
	}

и подключаем его в нужной секции server { при помощи команды

include /etc/nginx/block.conf

Внимание: если есть желание использовать GeoIP - удостоверьтесь что Nginx собран с этим модулем!