Коробка с разными разностями

GeoIP

GeoIP — библиотека для определения местоположения по ip-адресу, поддерживается компанией MaxMind. Опредение местоположения основывается на регулярно обновляемой базе данных по принадлежности ip-адресов организациям в разных странах. Существуют платные и бесплатные базы.

Для подключения функций GeoIP к php необходимо установить модуль php-pecl-geoip, после установки которого станут доступны функции GeoIP (http://www.php.net/manual/ru/book.geoip.php).

Подключить GeoIP можно не к php, а непосредственно к Apache, установив модуль mod_geoip (репозиторий CentALT):

yum -y install mod_geoip

После установки mod_geoip появятся переменные окружения GEOIP_COUNTRY_CODE, GEOIP_COUNTRY_NAME, GEOIP_CITY, которые будут содержать двухбуквенный код страны, полное название страны, название города.

Использовать эти переменные можно для разных целей.

Если в коде php нужна эта информация, можно обойтись без установки модуля php, а брать значения прямо из окружения:

$country = getenv("GEOIP_COUNTRY_CODE");
$city = getenv("GEOIP_CITY");

Можно заблокировать китайцев и американцев через .htaccess:

SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
Deny from env=BlockCountry

Можно, наоборот, разрешить доступ только своим:

SetEnvIf GEOIP_COUNTRY_CODE RU AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE UA AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE BY AllowCountry
Deny from All
Allow from env=AllowCountry

Можно переадресовывать на национальнцю версию сайта:

RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^DE$
RewriteRule ^(.*)$ http://de.site.ru$1 [L]

А можно просто писать город и страну в лог, для чего надо будет изменить описание формата лога в httpd.conf:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" (%{GEOIP_CITY}e, %{GEOIP_COUNTRY_CODE}e)"  combined

Точность определения зависит от актуальности используемых баз данных, которые необходимо регулярно обновлять с http://geolite.maxmind.com/download/geoip/database/. При обновлении системы командой yum update обновления баз GeoIP не происходит, об их обновлении надо позаботиться самому. Размещаются базы данных в /usr/share/GeoIP. Надо установить три базы: GeoIP.dat, GeoIPv6.dat, GeoLiteCity.dat.



Добавить комментарий