Вернуться назад

Установка GeoIp Centos+Nginx+Apache

Установка и настройка mod_geoip

# yum install GeoIP GeoIP-devel GeoIP-data zlib-devel

Создадим директорию для базы данных стран
# mkdir /usr/local/share/GeoIP
# cd /usr/local/share/GeoIP

Скачаем, распакуем архивы баз данных стран и mod_geoip
# wget http://www.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.8.tar.gz

# gunzip GeoIP.dat.gz
# gunzip GeoLiteCity.dat.gz
# tar xvzf mod_geoip2_1.2.8.tar.gz
# cd mod_geoip2_1.2.8

# apxs -i -a -L/usr/lib64 -I/usr/include -lGeoIP -c mod_geoip.c

Добавим в /etc/httpd/conf/httpd.conf строки

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat Standard
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat Standard
</IfModule>

Перезапустим Apache2 и запустим geoipupdate

# service nginx restart

# service httpd restart

# /usr/local/bin/geoipupdate

Конфиг апача для примера

<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>

Мне пришлось дополнительно ставить это:

yum install httpd-devel

http://stor.friendhosting.net/work/mod_rpaf-0.8-3.el6.art.x86_64.rpm

Перезапускаем веб-сервера (оба) и смотрим подгрузились ли модули

apachectl -M

Ниже содержимое файла 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>


Если не заработало, проверьте права на каталог с базой геоайпи.

 http://www.lissyara.su/articles/freebsd/www/mod_geoip/


igel
Дата: 24 января 2019 г. в 19:36:57

Автор: igel