From: Алексей Кеда (lissyara) <admin@lissyara.su.>
Date: Mon, 28 Mar 2008 18:21:07 +0000 (UTC)
Subject: Модуль определения географического положения по IP - mod_GeoIP
Оригинал: http://www.lissyara.su/?id=1133
Неплохой модуль для apache1.3 - по IP посетителя определяется
его страна, регион и город.
/usr/ports/>cd /usr/ports/www/mod_geoip
/usr/ports/www/mod_geoip/>make && make install && make clean
/usr/ports/www/mod_geoip/>pkg_info | grep "[Gg]eo"
GeoIP-1.3.14 Find the country that any IP address or hostname originates
mod_geoip-1.2.7 An Apache module that provides the country code of the clie
Он за собой тащит собственно GeoIP - из него ему нужна БД. После
установки редактируем конфиг апача - раскомментруем модуль
<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>
После чего перезапускаем апач, и пробуем, что у нас получилось, таким
скриптиком, на php:
Вот его вывод, для московского IP:
Откуда пришел:
Код страны: RU
Регион:
Имя страны: Russian Federation
Город:
Если заходить с частного IP (192.168.x.x) то не покажет ничего :)
Почему не показал регион и город - я так думаю что нас считают страной
дикой, где кроме медведей, ядерных ракет, и людей в телогрейках и
шапках-ушанках ничего и нету... Кстати, в примерах, на сайте автора
модуля, был пример, как заблокировать доступ с региона RU. Я же в
ответ привёл примёр как залочить буржуев :)
P.S. Добавлено по итогам первого комментария. Где взять базы - тут
лежит какая-то программа, не вникал. К ней идуд базы. Надо поставить
`expert`-версию, после чего установятся базы. Базы копируем куда надо,
правим чутка конфиг:
<IfModule mod_geoip.c>
##### модуль GeoIP начался
#
# Включаем модуль
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>
После чего доступно больше данных (судя по всему есть ещё база
провайдеров, т.к. ISP у меня не высвечивается):
Откуда пришел
Код страны: RU
Регион: 48
Имя страны: Russian Federation
Город: Moscow
Скорость:
dma_code: 0
area_code: 0
latitude: 55.752201
longitude: 37.615601
postal_code:
organization:Network of NICEVT
isp:
Половина пунктов не вполне понятна... Ну да и не важно.
Для того что бы модуль показывал регион и город необходимы еще 2 базы:
GeoIPCity.dat(19,359,354 байт) и GeoIPOrg.dat(81,218,923 байт), автор
за них требует денег, но устаревшую на месяц базу предоставляют в виде
GeoLite City http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
1078 Прочтений • [Модуль определения географического положения по IP - mod_GeoIP (geo mod_geoip apache)] [08.05.2012] [Комментариев: 0]