Jan 11 2010

MaxMind GeoIP – Localização Geográfica Pelo IP

Categoria: Apache, Linux, PHP=IceBurn= @ 14:12

Não será certamente novidade para vocês o facto de alguns serviços conseguirem obter o país a partir de um determinado IP.

A questão que talvez alguns de vós coloquem é quanto terão que pagar para ter acesso a esses dados. A resposta é bastante satisfatória: não têm de pagar nada, é grátis se utilizarmos a base de dados gratuita providenciada pela MaxMind – o GeoLite.

O GeoIP está disponível também como um módulo compatível com o servidor Apache e isso quer dizer que conseguiremos ter acesso ao Nome do País, Código do País e Código do Continente na superglobal $_SERVER do PHP e também em variáveis Apache.

A MaxMind disponibiliza ainda uma base de dados com uma precisão mais acurada mas que não é gratuita, no entanto o GeoLite (assim se chama a versão gratuita) é muito preciso, embora não disponibilize tanta informação quanto a paga.

Neste artigo irei indicar-vos como proceder à instalação do módulo GeoIP, na minha opinião, um dos mais úteis do Apache.

Temos portanto 3 requisitos:
- Servidor Apache 2 (que já deverão ter instalado, espero)
- Biblioteca em C do GeoIP
- Módulo GeoIP para Apache

Começamos por instalar a biblioteca em C do GeoIP:

wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar xzf GeoIP.tar.gz
cd GeoIP-1.4.6

O arquivo GeoIP.tag.gz contém sempre a última versão disponível, no entanto tenham em atenção que a versão que extraírem pode ser diferente e como o nome da pasta “GeoIP-1.4.6″ muda consoante a versão actual, portanto verifiquem o nome da pasta extraída usando o comando ls. Na altura da publicação deste artigo, a versão mais recente da biblioteca em C do GeoIP é a 1.4.6.

Agora que temos o arquivo descompactado no nosso servidor, vamos então proceder à instalação propriamente dita.

./configure
make
make check
make install

Segue-se a instalação do módulo GeoIP para o Apache 2.

wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar xzf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

Para activar a detecção para todo o servidor, editamos o ficheiro de configuração do Apache:

nano /etc/httpd/conf/httpd.conf

Encontrem a seguinte linha:

LoadModule geoip_module       /usr/lib/httpd/modules/mod_geoip.so

E por baixo adicionem o seguinte bloco:

<IfModule mod_geoip.c>
  GeoIPEnable On
</IfModule>

Opcionalmente e até por uma questão de performance do servidor, podemos activar apenas localmente nos domínios onde queremos a detecção geográfica, para tal adicionamos esse mesmo bloco no ficheiro .htaccess respectivo em vez de o fazermos directamente no ficheiro de configuração do Apache.

Para terminar a instalação, basta-nos fazer restart ao servidor apache:

service httpd restart

A partir deste momento já deverão estar disponíveis as variáveis do GeoIP

Em PHP:

$_SERVER['GEOIP_ADDR']
$_SERVER['GEOIP_CONTINENT_CODE']
$_SERVER['GEOIP_COUNTRY_CODE']
$_SERVER['GEOIP_COUNTRY_NAME']

Em Apache:

%{ENV:GEOIP_ADDR}
%{ENV:GEOIP_CONTINENT_CODE}
%{ENV:GEOIP_COUNTRY_CODE}
%{ENV:GEOIP_COUNTRY_NAME}

Designação das variáveis:
GEOIP_ADDR – IP a ser analisada
GEOIP_CONTINENT_CODE – Código do Continente (Ex: EU)
GEOIP_COUNTRY_CODE – Código do País (Ex: PT)
GEOIP_COUNTRY_NAME – Nome do País (Ex: Portugal)

Seguem-se os problemas mais comuns na instalação dos pacotes e respectivas resoluções.

Resolução de Problemas na Instalação da Biblioteca em C do GeoIP
Problema – Compilador não encontrado
configure: error: no acceptable C compiler found in $PATH
Resolução – Instalar GNU Compiler Collection:

yum install gcc

Problema – Zlib developer não instalado
configure: error: Zlib header (zlib.h) not found.
Resolução – Instalar o Zlib-devel:

yum install zlib-devel

Problema – Ferramenta para instalação de módulos do Apache não instalada.
apxs: command not found
Resolução – Instalar o pacote httpd developer:

yum install httpd-devel

Espero que vos seja tão útil quanto a mim.

Certamente também irá gostar destes artigos

RSS 2.0 Não perca os meus artigos! Subscreva a minha feed RSS.

Etiquetas: , , , , , , , , ,

Comentar Este Artigo