Jan 11 2010
MaxMind GeoIP – Localização Geográfica Pelo IP
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.soE 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-develProblema – 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-develEspero que vos seja tão útil quanto a mim.
Não perca os meus artigos! Subscreva a minha feed RSS.