11 июл. 2012 г.

MaxMind GeoIP и GeoIPCity на ур-не nginx


Далее заметка в духе "написал, чтоб не забыть"... Хотя, забывать то особо нечего.

Под GeoIP принято понимать набор программных инструментов, позволяющих определить географическое положение клиента по его IP адресу.
Во-первых, у MaxMind есть несколько видов GeoIP баз. В общем случае они делятся на базы со странами и базы с городами. В базах со странами городов нет ), в базах с городам есть не только города но и всякие там metro коды (отдельная ветка баз).



Эти БД нужны, например, для фильтрации трафика по странам, отключению лицензионного контента в России, например, и пр. Для точного таргетинга бесплатные базы без городов, например, не подходят.
В базах по городам данных, например, больше, такие базы чуть тяжелее.

Есть бесплатные и платные версии баз maxmind. Удивительно, но факт - в платных версиях больше данных, например, и они точней, например.


http://youtu.be/UJkvjC17epQ.



Установка бесплатной базы maxmind с данными о городах

1. Настраиваем nginx

sudo vim /etc/nginx/nginx.conf

http {
    geoip_city /usr/local/share/GeoIP/GeoLiteCity.dat;
    ...

2. В fastcgi_params добавляем

sudo vim /etc/nginx/fastcgi_params

### SET FASTCGI Variables ###
fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;

для uwsgi соответственно 

sudo vim /etc/nginx/uwsgi_params

### SET UWSGI Variables ###
uwsgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;

3. Качаем лайт базу (безвозмездно, значит даром)

wget -c http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

gunzip GeoLiteCity.dat.gz

куда-нибудь в /usr/local/share/GeoIP/

4. Ставим пакеты - не знаю, когда это нужно, т.к. у меня на убунте и федоре уже стояли.

sudo apt-get install geoip-bin libgeoip-dev libgeoip1

5. Перезапускам nginx

6. Теперь можно использовать переданные модулем nginx заголовки:

GEOIP_CITY
GEOIP_CITY_CONTINENT_CODE
GEOIP_CITY_COUNTRY_CODE
GEOIP_CITY_COUNTRY_CODE3
GEOIP_CITY_COUNTRY_NAME
GEOIP_LATITUDE
GEOIP_LONGITUDE
GEOIP_POSTAL_CODE
GEOIP_REGION

Вот пример данных из лайт базы для моего рабочего IP
'GEOIP_CITY': '',
'GEOIP_CITY_CONTINENT_CODE': 'EU',
'GEOIP_CITY_COUNTRY_CODE': 'RU',
'GEOIP_CITY_COUNTRY_CODE3': 'RUS',
'GEOIP_CITY_COUNTRY_NAME': 'Russian Federation',
'GEOIP_LATITUDE': '60.0000',
'GEOIP_LONGITUDE': '100.0000',
'GEOIP_POSTAL_CODE': '',
'GEOIP_REGION': ''

Не очень точно, да?

Использование платных версий Maxmind ДБ

Для загрузки баз воспользуйся логопасом, у вас ведь есть подписка MaxMind? http://www.maxmind.com/app/account. Загрузить БД можно по адресу: http://www.maxmind.com/app/download_files. Думаю, опытный пират найдет способ скачать платную версию MaxMind с rutracker.org, но я ни коим образом не поощряю подобное поведение ;).

1. GeoIP Country binary database - база данных стран

http {
    geoip_country GeoIP.dat;
    ...

Доступные параметры:

fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

2. GeoIP City binary database - база данных городов

http {
    geoip_city /usr/local/share/GeoIP/GeoIPCity.dat;
    ...

Пример ответа для того же IP
'GEOIP_CITY': 'Moscow',
'GEOIP_CITY_CONTINENT_CODE': 'EU',
'GEOIP_CITY_COUNTRY_CODE': 'RU',
'GEOIP_CITY_COUNTRY_CODE3': 'RUS',
'GEOIP_CITY_COUNTRY_NAME': 'Russian Federation',
'GEOIP_LATITUDE': '55.7522',
'GEOIP_LONGITUDE': '37.6156',
'GEOIP_POSTAL_CODE': '',
'GEOIP_REGION': '48'

Чуть точней, но все равно "та же х**ня, Миша".

Можно использовать обе базы (country и city) одновременно, но особого смысла в этом нет ).

см. http://wiki.nginx.org/HttpGeoipModule или http://nginx.org/ru/docs/http/ngx_http_geoip_module.html#geoip_country

Важный момент: есть подозрения, что мобильный трафик льется через крупные города, так что если вы планируете фильтровать трафик из российской глубинки - вас ждет разочарование.

Очевидное наблюдение: MaxMind БД для использования в больших международных проектах с не очень высокой точностью геотаргетирования.

При платной подписке вам дают возможность скачать все данные из базы в формате CSV. В нашем проекте эти данные используются для установки параметров таргетирования баннеров клиентами через соответствующую панель на сайте.

Комментариев нет: