yum install GeoIP GeoIP-devel
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/lib -I/usr/include -lGeoIP -c mod_geoip.c
В /etc/httpd/conf/httpd.conf добавляем:
LoadModule geoip_module /usr/lib/apache/mod_geoip.so
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
/etc/init.d/httpd restart
В случае с FreeBSD:
cd /usr/ports/net/GeoIP && make install
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c
К сожалению, данного расширения нет в RPM-ках поэтому будем ставить его из сорцов:
yum --enablerepo=remi install GeoIP-devel php-devel
cd /usr/local/src
wget http://pecl.php.net/get/geoip
tar zxvf ./geoip-1.0.7.tgz
cd geoip-1.0.7
phpize
./configure
make
make install
Будем запрещать доступ только если ип проверен по двум базам. т.к. там встречаются ошибки.
Качаем базу
ее надо сконвертить в формат Nginx скриптом geo2nginx.pl
Вторую базу качаем в CIDR формате.
в nginx.conf в http
geo $geo {
default US;
include geo-best.conf;
}
geo $geo2 {
default US;
include worldip.conf;
}
внутри Location
if ($geo ~ "^(CN)$"){
set $i "a";
}
if ($geo2 ~ "^(CN)$"){
set $i "a$i";
}
if ($i = "aa"){
access_log /var/log/httpd/bad-country.log;
return 403;
}