Установка модуля GeoIP для Apache 1.х и 2.x

Неплохой модуль для apache1.х и 2.х версий - по IP посетителя определяется его страна, регион и город. Может пригодиться, чтобы зарубить левых посетителей к примеру по странам...
Скачиваем нужные файлы:

cd /tmp
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
 
Для Apache 1.x:
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip/mod_geoip_1.3.4.tar.gz
Или смотрите какой есть последний http://geolite.maxmind.com/download/geoip/api/mod_geoip/
 
Для Apache 2.x:
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
Или смотрите какой есть последний http://geolite.maxmind.com/download/geoip/api/mod_geoip2/

Ставлю на Apache 2.x и пример дальше идет под 2.х:

Распаковываем файлы:

cd /tmp
tar xzf GeoIP.tar.gz
tar xzf mod_geoip2_1.2.5.tar.gz
gunzip GeoLiteCity.dat.gz
gunzip GeoIP.dat.gz

Приступаем к установке главного пакета для GeoIP и копируем ему новые базы:
cd /tmp/GeoIP-1.4.6
./configure
make install clean
cd /tmp
cp *.dat /usr/local/share/GeoIP/

Теперь компилируем модуль для Apache 2.x (в моем случае стоит directadmin на сервере и в нем используется файл apxs, у Вас может быть apxs2):
cd /tmp/mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

Теперь добавим строки в файл httpd.conf (в моем случае он находится /etc/httpd/conf/httpd.conf):
LoadModule      geoip_module    /usr/lib/apache/mod_geoip.so
<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
    GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat
    GeoIPOutput All
</IfModule>

Перезагружаем Apache...

Проверяем модуль...
Создадим страничку со следующим кодом php, к примеру страницу geoip.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>

Ну и смотрим, что нам выдало...

Также можно скачать и другие базы для более профессионального использования...
Где взять базы - тут лежит какая-то программа, не вникал. С ней идёт несколько баз. Это программа для Windows... В папке с программой есть папка - "Config", с этой папки нам нужны все файлы DAT. Заливаем их на FTP и копируем в папку /usr/local/share/GeoIP/...

Теперь опять можно подправить файл httpd.conf, а точнее пункт в файле конфига "IfModule mod_geoip.c":

<IfModule mod_geoip.c>
# Включаем модуль
GeoIPEnable     On
# Указываем путь к БД (в доках говориться, что надо тока если местоположение БД нестандартное, но
# какое считается стандартным - нигде не нашёл - потому на всякий случай указываю) - БД инсталлится вместе с
# портом GeoIP.
# Баз может быть и больше... Подгружаем все которые надо...
GeoIPDBFile     /usr/local/share/GeoIP/GeoIP.dat
GeoIPDBFile     /usr/local/share/GeoIP/GeoIPCity.dat
GeoIPDBFile     /usr/local/share/GeoIP/GeoIPOrg.dat
# Следующая директива устанавливает где применяется модуль GeoIP (по крайней мере я так понял) - тока в
# примечаниях apache (Notes), только в переменных окружения (Env) или везде (All - по дефолту):
GeoIPOutput     All
# заставляет проверять БД GeoIP.dat чтобы определить, обновлялась ли БД
# нужно чтобы не перезапускать апач при обновлении БД
GeoIPFlags      CheckCache
 
###### пример блокировки отдельных стран
# Блокируем косоглазеньких - всё равно ничё не поймут
SetEnvIf        GEOIP_COUNTRY_CODE      CN      BlockCountry
# Блокируем америкосов - тоже ничё не поймут, тупые слишком.
SetEnvIf        GEOIP_COUNTRY_CODE      CN      BlockCountry
# Что мы, собствено, делаем по вышеуказанным правилам,
# это должно быть в директории которую блокируем, т.е. внутри
# <Directory "/usr/local/www/data">
#    Deny from env=BlockCountry
# </Directory>
</IfModule>

Ну и можно изменить наш файлик отображения geoip.php (тестовый наш файлик):
<pre>
<b>Откуда припёрся</b>
<?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");
$connect_type = apache_note("GEOIP_NETSPEED");
$dma_code = apache_note("GEOIP_DMA_CODE");
$area_code = apache_note("GEOIP_AREA_CODE");
$latitude = apache_note("GEOIP_LATITUDE");
$longitude = apache_note("GEOIP_LONGITUDE");
$postal_code = apache_note("GEOIP_POSTAL_CODE");
$organization = apache_note("GEOIP_ORGANIZATION");
$isp = apache_note("GEOIP_ISP");
 
echo "Код страны:  " . $country_code . "\n";
echo "Регион:      " . $region . "\n";
echo "Имя страны:  " . $country_name . "\n";
echo "Город:       " . $city . "\n";
echo "Скорость:    " . $connect_type . "\n";
echo "dma_code:    " . $dma_code . "\n";
echo "area_code:   " . $area_code . "\n";
echo "latitude:    " . $latitude . "\n";
echo "longitude:   " . $longitude . "\n";
echo "postal_code: " . $postal_code . "\n";
echo "Организация: " . $organization . "\n";
echo "Провайдер:   " . $isp . "\n";
?>

Ну, а теперь, наслаждаемся...

Если есть вопросы, то просим Вас посетить наш форум, на котором Вы сможете попросить бесплатно описание...



Яндекс.Метрика
Счётчик ТЦ#65533;Ц LiveRSS: Каталог русскоязычных RSS-каналов