Подключаем репозитории rpmforge и epel
yum install geoip geoip-devel
Далее нужно пересобрать nginx с geoip (—with-http_geoip_module Полная наша команда ./configure —prefix=/usr/local/nginx —conf-path=/usr/local/nginx/etc/nginx.conf —http-log-path=/var/log/nginx/access.log —pid-path=/var/run/nginx/nginx.pid —user=apache —group=apache —without-mail_pop3_module —without-mail_imap_module —without-mail_smtp_module —with-http_stub_status_module —with-http_geoip_module).
Открываем nginx.conf (/usr/local/nginx/etc/nginx.conf), дописываем в секцию http следующий блок директив:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $bad_country {
default 1;
include /usr/local/nginx/etc/good_countries; }
Этот блок map, означает, что все страны находящиеся в базе данных, являются запрещенными по умолчанию, а в файле good_countries, будут перечислены разрешенные страны. Если у вас например ситуация, когда разрешенных стран больше чем запрещенных, можно легко инвертировать данную логику и создать файл bad_countries со списком запрещенных стран, разрешив все остальные.
Теперь настройки хоста. В секции server атакуемого хоста (/usr/local/directadmin/data/users/Имя_пользователя/nginx.conf) прописываем:
if ($bad_country){
return 444;
}
Теперь вернемся к файлу good_countries (Если отсутствует, то необходимо создать. touch /usr/local/nginx/etc/good_countries). Тут все предельно просто, страны, которым разрешен доступ на сайт, перечислены в следующем формате:
TM 0;
UA 0;
UZ 0;
RU 0;
…
и т.д.
То есть, что-бы разрешить какую-либо страну, достаточно добавить ее двух буквенный код и 0, после чего перезагрузить конфиг nginx