Saltar a contenido

geoip2: Módulo GeoIP2 de NGINX

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-geoip2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-geoip2

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_geoip2_module.so;
load_module modules/ngx_stream_geoip2_module.so;

Este documento describe nginx-module-geoip2 v3.4 lanzado el 22 de junio de 2022.


ngx_http_geoip2_module - crea variables con valores de las bases de datos maxmind geoip2 basados en la IP del cliente (por defecto) o de una variable específica (soporta tanto IPv4 como IPv6)

El módulo ahora soporta flujos de nginx y puede ser utilizado de la misma manera que se puede usar el módulo http.

Descargar la base de datos Maxmind GeoLite2 (opcional)

Las bases de datos GeoLite2 gratuitas están disponibles en el sitio web de Maxmind (requiere registro)

Ejemplo de uso:

http {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        auto_reload 5m;
        $geoip2_metadata_country_build metadata build_epoch;
        $geoip2_data_country_code default=US source=$variable_with_ip country iso_code;
        $geoip2_data_country_name country names en;
    }

    geoip2 /etc/maxmind-city.mmdb {
        $geoip2_data_city_name default=London city names en;
    }
    ....

    fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param CITY_NAME    $geoip2_data_city_name;
    ....
}

stream {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        $geoip2_data_country_code default=US source=$remote_addr country iso_code;
    }
    ...
}
Metadatos:

Recupera metadatos sobre la base de datos geoip.

$variable_name metadata <field>
Campos disponibles: - build_epoch: la marca de tiempo de construcción de la base de datos maxmind. - last_check: la última vez que se verificó la base de datos en busca de cambios (cuando se usa auto_reload) - last_change: la última vez que se recargó la base de datos (cuando se usa auto_reload)

Autorreload (por defecto: deshabilitado):

Habilitar la recarga automática hará que nginx verifique el tiempo de modificación de la base de datos en el intervalo especificado y la recargue si ha cambiado.

auto_reload <interval>

GeoIP:

$variable_name [default=<value] [source=$variable_with_ip] path ...
Si no se especifica un valor por defecto, la variable estará vacía si no se encuentra.

Si no se especifica una fuente, se utilizará $remote_addr para realizar la búsqueda.

Para encontrar la ruta de los datos que deseas (por ejemplo: country names en), utiliza la herramienta mmdblookup:

$ mmdblookup --file /usr/share/GeoIP/GeoIP2-Country.mmdb --ip 8.8.8.8

  {
    "country":
      {
        "geoname_id":
          6252001 <uint32>
        "iso_code":
          "US" <utf8_string>
        "names":
          {
            "de":
              "USA" <utf8_string>
            "en":
              "United States" <utf8_string>
          }
      }
  }

$ mmdblookup --file /usr/share/GeoIP/GeoIP2-Country.mmdb --ip 8.8.8.8 country names en

  "United States" <utf8_string>

Esto se traduce a:

$country_name "default=United States" source=$remote_addr country names en
Comandos adicionales:

Estos comandos funcionan de la misma manera que el original ngx_http_geoip_module documentado aquí: http://nginx.org/en/docs/http/ngx_http_geoip_module.html#geoip_proxy.

Sin embargo, si proporcionas la opción source=$variable_with_ip en una variable, estas configuraciones serán ignoradas para esa variable en particular.

geoip2_proxy < cidr >
Define direcciones de confianza. Cuando una solicitud proviene de una dirección de confianza, se utilizará una dirección del campo de encabezado de solicitud "X-Forwarded-For".

geoip2_proxy_recursive < on | off >
Si la búsqueda recursiva está deshabilitada, entonces en lugar de la dirección del cliente original que coincide con una de las direcciones de confianza, se utilizará la última dirección enviada en "X-Forwarded-For". Si la búsqueda recursiva está habilitada, entonces en lugar de la dirección del cliente original que coincide con una de las direcciones de confianza, se utilizará la última dirección no confiable enviada en "X-Forwarded-For".

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-geoip2.