Установка GeoIp Centos+Nginx+Apache
Установка и настройка mod_geoip
# yum install GeoIP GeoIP-devel GeoIP-data zlib-devel
Создадим директорию для базы данных стран
# mkdir /usr/local/share/GeoIP
# cd /usr/local/share/GeoIP
Скачаем, распакуем архивы баз данных стран и mod_geoip
# wget http://www.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.8.tar.gz
# gunzip GeoIP.dat.gz
# gunzip GeoLiteCity.dat.gz
# tar xvzf mod_geoip2_1.2.8.tar.gz
# cd mod_geoip2_1.2.8
# apxs -i -a -L/usr/lib64 -I/usr/include -lGeoIP -c mod_geoip.c
Добавим в /etc/httpd/conf/httpd.conf строки
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat Standard
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat Standard
</IfModule>
Перезапустим Apache2 и запустим geoipupdate
# service nginx restart
# service httpd restart
# /usr/local/bin/geoipupdate
Конфиг апача для примера
<IfModule mod_geoip.c> ##### модуль GeoIP начался # # Включаем модуль GeoIPEnable On # Указываем путь к БД (в доках говориться, что # надо тока если местоположение БД нестандартное, но # какое считается стандартным - нигде не нашёл - потому # на всякий случай указываю) - БД инсталлится вместе с # портом GeoIP. GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat # Следующая директива устанавливает где применяется модуль # GeoIP (по крайней мере я так понял) - тока в примечаниях apache (Notes), # только в переменных окружения (Env) или везде (All - по дефолту): GeoIPOutput All # заставляет проверять БД GeoIP.dat чтобы определить, обновлялась ли БД # нужно чтобы не перезапускать апач при обновлении БД GeoIPFlags CheckCache ###### пример блокировки отдельных стран # Блокируем косоглазеньких - всё равно ничё не поймут SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # Блокируем америкосов - тоже ничё не поймут, тупые слишком. SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry # Что мы, собствено, делаем по вышеуказанным правилам, # это должно быть в директории которую блокируем, т.е. внутри # <Directory "/usr/local/www/data"> # ............... #Deny from env=BlockCountry # </Directory> </IfModule>
Мне пришлось дополнительно ставить это:
yum install httpd-devel
http://stor.friendhosting.net/work/mod_rpaf-0.8-3.el6.art.x86_64.rpm
Перезапускаем веб-сервера (оба) и смотрим подгрузились ли модули
apachectl -M
Ниже содержимое файла php для проверки работы:
<pre> Откуда припёрся: <?php $country_code = apache_note("GEOIP_COUNTRY_CODE"); $region = apache_note("GEOIP_REGION"); $country_name = apache_note("GEOIP_COUNTRY_NAME"); $city = apache_note("GEOIP_CITY"); echo "Код страны: " . $country_code . "\n"; echo "Регион: " . $region . "\n"; echo "Имя страны: " . $country_name . "\n"; echo "Город: " . $city . "\n"; ?> </pre>
Если не заработало, проверьте права на каталог с базой геоайпи.
http://www.lissyara.su/articles/freebsd/www/mod_geoip/
Автор: igel