АгАртИ-А
Разработка АгАртИ-А.рф
- ^ X
GeoIP: Определяем координаты, страну, город средствами Apache + PHP

GeoIP: Определяем координаты, страну, город средствами Apache + PHP

Создано: 2016-09-20 16:32:06

GeoIP: Определяем координаты, страну, город средствами Apache + PHP

А сегодня, мой юный друг (или подруга), мы поговорим о том, как на FreeBSD настроить связку GeoIP + Apache24 + PHP.

И так, ставим сначала сам GeoIP:

#> cd  /usr/ports/net/GeoIP && make install clean

Ставим все по дефолту. Теперь нам надо запустить скрипт, что он попросит:

#> /usr/local/bin/geoipupdate.sh

Скрипт скачивает первоначальную БД, этого недостаточно, поэтому отдельно скачиваем и другие БД, и копируем их куда надо:

#> wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
#> wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
#> gunzip GeoLiteCity.dat.gz
#> gunzip GeoIP.dat.gz
#> cp GeoIP.dat /usr/local/share/GeoIP/GeoIP.dat
#> cp GeoLiteCity.dat /usr/local/share/GeoIP/GeoLiteCity.dat

Теперь ставим mod_geoip2:

#> cd  /usr/ports/www/mod_geoip2 && make install clean

После установки редактируем конфиг Apache (ee /usr/local/etc/apache24/httpd.conf), раскоменчиваем там строку 
LoadModule geoip_module libexec/apache24/mod_geoip.so

Теперь нам необходимо, для определенного сайта разрешить GeoIP. Переходим в секцию Apache отвечающий за сайт, и прописываем туда данные. Например:

<VirtualHost *:80>

ServerName apache22.com
ServerAlias  www.apache22.com
DocumentRoot /bla-bla/bla-bla/apache22.com/

GeoIPEnable On

GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat

</VirtualHost>

Теперь у нас все готово. Тестируем конфиг апача, и если все ОКе, то перезапускаем его:

#> apachectl configtest
Performing sanity check on apache24 configuration:
Syntax OK

#> apachectl restart

Теперь нам надо проверить работу. Создаем где-нибудь на сайте файлик, пусть будет geo.php, в который мы прописываем:

<?

echo "Contry Code: ".apache_note("GEOIP_COUNTRY_CODE");
echo "<br />Country: ".apache_note("GEOIP_COUNTRY_NAME");
echo "<br />Region: ".apache_note("GEOIP_REGION_NAME");
echo "<br />City: ".apache_note("GEOIP_CITY");

?>

Переходим по ссылке: http://apache22.com/geo.php и если видим данные, то все збс. Если нет - перепроверьте конфиги и прочее.

Вот, а ниже все возможные директивы, которые могут быть. Спжж отедова: http://nginx.org

geoip_country_code - двухбуквенный код страны, например, “RU”, “US”. 
geoip_country_code3 - трёхбуквенный код страны, например, “RUS”, “USA”. 
geoip_country_name - название страны, например, “Russian Federation”, “United States”. 
geoip_city_continent_code - двухбуквенный код континента, например, “EU”, “NA”. 
geoip_city_country_code - двухбуквенный код страны, например, “RU”, “US”. 
geoip_city_country_code3 - трёхбуквенный код страны, например, “RUS”, “USA”. 
geoip_city_country_name - название страны, например, “Russian Federation”, “United States”. 
geoip_dma_code - DMA-код региона в США (также известный как “код агломерации”), согласно геотаргетингу Google AdWords API. 
geoip_latitude - широта.
geoip_longitude - долгота.
geoip_region - двухсимвольный код региона страны (область, край, штат, провинция, федеральная земля и тому подобное), например, “48”, “DC”. 
geoip_region_name - название региона страны (область, край, штат, провинция, федеральная земля и тому подобное), например, “Moscow City”, “District of Columbia”. 
geoip_city - название города, например, “Moscow”, “Washington”. 
geoip_postal_code - почтовый индекс.
geoip_org - название организации, например, “The University of Melbourne”.

Только при вызове директивы, саму директиву пишите в верхнем регистре, как в примере выше.

Соотвественно не забывайте обновлять базы почаще. И все будет збс.

Удачи!