Geolocalización en tu página web

Geolocalización es la palabra que designa la acción de informar la posición y localización geográfica de un determinado ( en el caso que hablamos ) visitante de una web.

geolocalizacion localizacion nacion pais ciudad geoip

En el siguiente manual voy a escribir una guía de pasos para dotar de soporte de geolocalización (de forma totalmente gratuita) un servidor web, y así utilizar esta información de manera sencilla y eficiente.

Así podremos guardar información acerca de la localización de los usuarios que han comentado, que han subido una foto, e incluso combinarlo con mod_rewrite yrealizar redirecciones dependiendo de su pais, etc.

Requisitos previos

Para preparar el sistema de geolocalización nos vamos a basar en un servidor Apache (de la rama 2.x) bajo un sistema operativo Linux, en nuestro caso un CentOS. También necesitaremos soporte PHP y herramientas de compilación, que por lo general ya vienen instaladas en todo servidor Linux.

En este manual vamos a utilizar la base de datos de MaxMind, que incorpora GeoLite City una base de información de paises y ciudades, que además provee varios métodos de uso:

  • Formato CSV: Formato de texto plano, separado por comas, que puede utilizarse para desarrollar una aplicación de búsqueda y resolución de IPs, o por otra parte, importar en una base de datos SQL, para crear un sistema de consulta.
  • Formato binario: Un formato binario generado por MaxMind, mucho más eficiente y rápido, que permite hacer consultas de manera más ligera. El formato binario permite la manipulación con una API open source para diferentes lenguajes (PHP, C, Java, Perl, Python, C#, Pascal, Ruby…).

En este manual vamos a ir un poco más allá y compilaremos el código para utilizarlo como módulo de Apache, y ganar en rapidez y eficiencia, teniendo a nuestra disposición unas variables GEOIP_COUNTRY_CODE y GEOIP_COUNTRY_NAME con la información disponibles para utilizar en nuestro código PHP directamente.

Descarga y preparación de ficheros

  1. En primer lugar, nos descargamos los fuentes del módulo mod_geoip2 para Apache (versión 1.2.1 en estos momentos). Lo desempaquetamos con un tar -xzvf mod_geoip2_1.2.1.tar.gz y accedemos a la carpeta creada.
  2. También nos descargaremos la última API de GeoIP para C (1.4.4 en estos momentos), ya que se necesita para generar el módulo mod_geoip2 para Apache. Desempaquetamos entonces, con un tar -xzvf GeoIP.tar.gz y accedemos a la carpeta creada.

Compilación de la API para C

¡Ojo! Antes de compilar el módulo de Apache, necesitaremos esta segunda API ( para C ) instalada en nuestro sistema. Para ello, escribimos el mantra de compilación ./configure, make y finalmente, realizamos la instalación con un make install.

Esto habrá generado unas cabeceras en nuestra carpeta /usr/local/include, entre otros que nos permitirán compilar el módulo de Apache sin problemas.

Asi pues, salimos de la carpeta actual cd .., volviendo a la carpeta de las fuentes del mod_geoip2. Aquí escribiremos apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c. La utilidad apxs (APache eXtenSion tool) se encargará de compilar el modulo e instalarlo en su ubicación correspondiente (generalmente /usr/lib/httpd/modules/). Incluso, dará los permisos adecuados e insertará la linea en el fichero de configuración de Apache.

No obstante, puedes comprobar que, ha sido insertada, en el fichero /etc/httpd/httpd.conf o similar:

LoadModule geoip_module modules/mod_geoip.so

Configuración del módulo mod_geoip2

En el anterior fichero de configuración, podemos añadir una linea Include mod_geoip.conf para crear un fichero mod_geoip.conf donde ubicar la información básica para hacer funcionar el módulo:

# mod_geoip2 configuration file

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

GeoIPEnableUTF8 On
GeoIPOutput Env
#GeoIPOutput Notes
#GeoIPOutput All

Remarcar que esta configuración básica activa el módulo con nuestra base binaria GeoLiteCity.dat (~16MB) que tendremos que colocar en la ruta /usr/local/share/GeoIP. En la directiva GeoIPDBFile se pueden establecer varias bases con distinto nombre, para utilizar según necesidades de memoria, situación, etc.

Por último, existen dos formas de proporcionar información geolocalizable desde Apache, a través de variables de entorno (Environment) activando GeoIPOutput a Env o a través del comando apache_note de PHP. La primera es más cómoda, así que activamos sólo esta, y desactivamos las demás para ahorro de recursos, aunque si se desea se pueden activar las dos con All.

Ejemplo final

Finalmente, tenemos el sistema de geolocalización instalado y nos proporciona información adicional desde PHP, mediante el array asociativo SERVER, por ejemplo $_SERVER[‘GEOIP_CITY’]:

Variable Valor
GEOIP_CONTINENT_CODE EU
GEOIP_COUNTRY_CODE ES
GEOIP_COUNTRY_NAME Spain
GEOIP_REGION 29
GEOIP_CITY Madrid
GEOIP_DMA_CODE 0
GEOIP_AREA_CODE 0
GEOIP_LATITUDE 40.400002
GEOIP_LONGITUDE -3.683300

Como extra, en ip-to-country existen varios comprimidos de diferente tamaño, con un conjunto de banderas, ordenadas por su código de pais, que pueden servir para colocar imagen en nuestro código PHP.

Otros sistemas de Geolocalización

Deja un comentario