- How to Install the PHP GeoIP Extension
- Installing GeoIP on PHP 7.X
- Installing GeoIP on PHP 5.X
- Verifying GeoIP Is Installed
- Uninstalling the GeoIP Extension
- Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora
- Проверка работы GeoIP для Apache CentOS/RedHat/Fedora.
- Обновление баз для GeoIP
- Блокировка стран
- Перенаправление пользователей по странам
- Installing the PHP geolocalization extension on CentOS
- First step: downloading the GeoIP databases
- Step 2: Uncompress the files
- Step 3: Configure the context
- Step 4: Enable the GeoIP PECL module
- About the author
- Как установить GeoIP в CentOS?
How to Install the PHP GeoIP Extension
In the examples shown, replace «X.Y» with your app’s PHP version (for example, «7.1»). To install a PECL extension for multiple PHP versions, repeat the PECL extension installation for each PHP version.
The GeoIP extension allows you to find the location of an IP address, including the city, state, country, latitude, and longitude.
If you’d like to use the new GeoIP2, MaxMind now offers a pure PHP implementation that doesn’t require a C extension: https://github.com/maxmind/GeoIP2-php.
Installing GeoIP on PHP 7.X
To install this extension on PHP 7.0, 7.1, 7.2, 7.3, or 7.4, run the following commands as your server’s root user:
sudo apt-get -y install gcc make autoconf libc-dev pkg-config sudo apt-get -y install libgeoip-dev sudo pecl7.X-sp install geoip-beta
Once installed, create a configuration file for the extension and restart PHP by running the following command as root:
sudo bash -c "echo extension=geoip.so > /etc/php7.X-sp/conf.d/geoip.ini" sudo service php7.X-fpm-sp restart
Installing GeoIP on PHP 5.X
To install this extension on PHP 5.4, 5.5, or 5.6, run the following commands as your server’s root user:
sudo apt-get -y install gcc make autoconf libc-dev pkg-config sudo apt-get -y install libgeoip-dev sudo pecl5.X-sp install geoip
Once installed, create a configuration file for the extension and restart PHP by running the following command as root:
sudo bash -c "echo extension=geoip.so > /etc/php5.X-sp/conf.d/geoip.ini" sudo service php5.X-fpm-sp restart
Verifying GeoIP Is Installed
You can check that the extension was installed with this command:
The output will look like this:
$ php7.1-sp -i | grep geoip /etc/php7.1-sp/conf.d/geoip.ini, geoip geoip support => enabled geoip extension version => 1.1.1 geoip library version => 1006000 geoip.custom_directory => no value => no value
Uninstalling the GeoIP Extension
To uninstall this extension, as root run the commands:
sudo rm /etc/phpX.Y-sp/conf.d/geoip.ini sudo peclX.Y-sp uninstall geoip
Next, restart PHP-FPM with the command:
sudo service phpX.Y-fpm-sp restart
Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora
GeoIP — это продукт Maxmind который состоит из нескольких сопутствующих товаров. GeoIP преподносит информацию о конкретном IP-адрес. ГеоИП выполняет поиск по своим базам данных по данному хосту или IP-адресу и возвращает информацию о стране, где находиться IP, город, провайдер и другую информацию.
В своей статье «Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora» хочу рассказать как установить GeoIP для Apache CentOS/RedHat/Fedora на примере CentOS 6.6.
Способ 1 — установка из пакетов.
Переходим в папку и выкачиваем все необходимое. Скачиваем GeoIP и GeoIpCity:
# mkdir /usr/share/GeoIP && cd /usr/share/GeoIP && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
Распаковываем скачанные архивы:
# gunzip GeoIP.dat.gz && gunzip GeoLiteCity.dat.gz
— Устанавливаем PHP с поддержкой геоИП:
# yum install php-devel php-pear php-devel GeoIP GeoIP-devel GeoIP-data zlib-devel mod_geoip -y
— Можно еще одним способом установить, используя pecl.
Устанавливаем дополнительные пакеты для работы:
# yum install php-pear pecl -y
Обновляем содержимое репозитория:
# pecl channel-update pecl.php.net
Прописываем ( добавляем) библиотеку в php.ini:
echo "extension=geoip.so" > /etc/php.d/geoip.ini
Способ 2 — установка из исходного кода.
Вы должны знать, как установить модули Apache и пересобрать Apache с помощью APXS.
Переходим в директорию и скачиваем файлы:
# cd /usr/local/src/ && wget http://www.maxmind.com/download/geoip/api/c/GeoIP-latest.tar.gz && tar -xzf GeoIP-latest.tar.gz && cd /usr/local/src/GeoIP-*
Устанавливаем утилитку ( можно и без нее):
Можно собрать rpm пакет, вы можете ознакомиться:
Но я покажу как произвести установку дальше:
# make && make check && make install
Скачиваем модуль для апача — mod_geoip, распаковываем его и переходим в папку для конфигурирования:
# cd /usr/local/src/ && wget http://www.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2-latest.tar.gz && tar -xzf mod_geoip2-*.tar.gz && cd /usr/local/src/mod_geoip2_*
Выполняем команду для установки данного модуля:
# apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c
-bash: apxs: command not found
# chmod 755 /usr/lib64/httpd/modules/mod_geoip.so
Вывело напоминание, что необходимо прописать ( активировать) geoip в конфигурационом файле httpd.conf. Для этого, выполняем следующие действия:
# vim /etc/httpd/conf/httpd.conf
И прописываем следующие строки:
[. ]GeoIPEnable On GeoIPScanProxyHeaders On GeoIPDBFile /usr/local/share/geoip/GeoIP.dat GeoIPDBFile /usr/local/share/geoip/GeoLiteCity.dat [. ]
Последние штрихи, нужно скачать и положить в папку базы:
# cd /usr/local/share && mkdir geoip && cd geoip && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz && gunzip GeoIP.dat.gz
# cd /usr/local/share/geoip && wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz && gunzip GeoLiteCity.dat.gz
И переходим к тестированию.
Проверка работы GeoIP для Apache CentOS/RedHat/Fedora.
# echo "" > /home/captain/php_info.php
/home/captain — это путь, который прописан в виртуальном хосте для моего сайта.
2. Можно выполнить команду:
# vim /home/captain/geoip_test.php
Whence are you come to here?:Обновление баз для GeoIP
Создаем скрипт для обновления ( так будет проще всего):
# vim /home/captain/update_geoip_db.sh#!/bin/bash cd /usr/local/share/geoip/ mv GeoIP.dat GeoIP.dat.old && mv GeoLiteCity.dat GeoLiteCity.dat.old /usr/bin/wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz /usr/bin/wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoIP.dat.gz && gunzip GeoLiteCity.dat.gz# chmod 750 /home/captain/update_geoip_db.shДобавляем данный скрипт в crontab на выполнение, каждые 1-е число месяца:
# crontab -e 0 0 1 * * /home/captain/update_geoip_db.shБлокировка стран
Создаем файл ( если его нет) .htaccess. И для примера, например, я хочу заблокировать всех пользователей с Белорусии и Румынии, то прописываем данные строки в файл:
GeoIPEnable On GeoIPDBFile /usr/share/geoip/GeoIP.dat SetEnvIf GEOIP_COUNTRY_CODE RO BlockCountry SetEnvIf GEOIP_COUNTRY_CODE RL BlockCountry Deny from env=BlockCountryPS: можно так же вставлять в конфиг с apache. В раздел
Перенаправление пользователей по странам
Ниже пример кода будет перенаправлять пользователей на основе кода страны. Если вы хотите перенаправить всех пользователей в зависимости от страны, то нужно использовать mod_rewrite в сочетании с mod_geoip в вашем файле .htaccess. Для примера, я сделаю перенаправление для Украины и Польши следующим образом:
RewriteEngine on GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat RewriteCond % ^(UA|PL)$ RewriteRule ^(.*)$ http://www.linux-notes.org/UA_PL/$1 [L]Вот и все, моя тема «Установка GeoIP и Mod_GeoIP для Apache CentOS/RedHat/Fedora» завершена.
Installing the PHP geolocalization extension on CentOS
Lately, I've had the need to install a geolocation database on a web server to localize (as closely as possible) a visitor based on its IP address.
For this, I've been using the MaxMind geolocation database. Although Maxmind is a commercial service, they provide a free database mapping IPs to countries. Maxmind provides a PHP geoip extension enabling a very quick access to the GeoIp database.
In this blog article, I'll describe all the required steps to install the geoip extension on a PHP server, on a CentOS distribution.
First, a quick note about Debian/Ubuntu user. They have the chance to have a nice package installed. So installing the module is as simple is typing:
First step: downloading the GeoIP databases
You must download the database mapping IP addresses to locations.
Maxmind provides a free database mapping IP addresses to countries.
It can be downloaded at the GeoLite Coutry database download page.If you have a Maxmind account, you can download your databases in your account page.
Maxmind provides files in many formats. You must download the file in the "Binary format for APIs".
Note: if you are working on a remote server through SSH, lynx can be useful to download the files:
yum install lynx lynx http://www.maxmind.com/app/download_files
Step 2: Uncompress the files
You should uncompress the files in the directory /var/lib/GeoIP.
At the end of this operation, there should be one or many ".dat" files into the /var/lib/GeoIP directory.Step 3: Configure the context
This step is needed only if SELinux is enabled on your system.
SELinux is a security mechanism that will prevent Apache to access the geolocalisation database if it is not explicitly allowed to.In order to grant access to the Geolocalisation database, use these commands:
chcon -t httpd\_sys\_content_t /var/lib/GeoIP chcon -t httpd\_sys\_content_t /var/lib/GeoIP/* chcon system\_u:object\_r:textrel\_shlib\_t /usr/lib/php/modules/geoip.so
Step 4: Enable the GeoIP PECL module
The geoip PHP extension is a PECL module.
The PECL module has a dependency on the geoip C library that must be installed:yum install GeoIP GeoIP-devel
If PECL is not installed, you must install it on the server:
yum install php-pear php-devel httpd-devel
Then, you can start retrieving and compiling the module:
Finally, you must tell PHP to load the extension. On CentOS, we can do that by adding a file in the /etc/php.d directory:
In this file, just add this line:
Finally, just restart Apache:
About the author
David is CTO and co-founder of TheCodingMachine and WorkAdventure. He is the co-editor of PSR-11, the standard that provides interoperability between dependency injection containers. He is also the lead developper of GraphQLite, a framework-agnostic PHP library to implement a GraphQL API easily.
Как установить GeoIP в CentOS?
В качестве вступления давайте поговорим о том, что же такое GeoIP. GeoIP — это библиотека, которая позволяет определить географическое местоположение пользователя по IP адресу. Данную библиотеку можно использовать для своих проектов, перед этим так же следует установить расширение PHP, после чего мы получаем набор дополнительных функций для работы с данным модулем. Рассмотрим пример, как установить эту библиотеку на свой сервер под управлением Linux CentOS.
Первым делом, добавляем репозиторий EPHEL, для этого в консоли сервера вводим команду:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5Server/x86_64/epel-release-5-3.noarch.rpmЗатем устанавливаем библиотеку GeoIP посредством yum:
yum install geoip geoip-develПосле того, как библиотека была установлена, нам предстоит скачать файл с базой адресов, и разместить в нужном месте:
cd /tmp wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip ./GeoIP.dat.gz rm /usr/share/GeoIP/GeoIP.dat mv ./GeoIP.dat /usr/share/GeoIP/GeoIP.datПосле выполнения этих манипуляций, нам так же потребуется установить расширение PHP. Php-geoip является модулем, который позволит использовать функции библиотеки в PHP.
echo "extension=geoip.so" >>/etc/php.ini pecl install geoipВ ходе выполнения команды может возникнуть ошибка: «pecl.php.net is using a unsupported protocal — This should never happen.install failed» исправляется это дело так:
cd 'pecl config-get php_dir' mv .channels .channels-broken pecl update-channelsПроверяем установку библиотеки GeoIP:
Так же работу GeoIP можно проверить в PHP, для этого достаточно в скрипте обратиться к функции:
geoip_country_name_by_name($_SERVER['REMOTE_ADDR']);