Aller au contenu

geoip2: Module GeoIP2 de NGINX

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

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

Ce document décrit nginx-module-geoip2 v3.4 publié le 22 juin 2022.


ngx_http_geoip2_module - crée des variables avec des valeurs provenant des bases de données maxmind geoip2 en fonction de l'IP du client (par défaut) ou d'une variable spécifique (prend en charge à la fois IPv4 et IPv6)

Le module prend désormais en charge les flux nginx et peut être utilisé de la même manière que le module http.

Télécharger la base de données Maxmind GeoLite2 (optionnel)

Les bases de données GeoLite2 gratuites sont disponibles sur le site web de Maxmind (inscription requise)

Exemple d'utilisation :

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;
    }
    ...
}
Métadonnées :

Récupérer des métadonnées concernant la base de données geoip.

$variable_name metadata <field>
Champs disponibles : - build_epoch : le timestamp de construction de la base de données maxmind. - last_check : la dernière fois que la base de données a été vérifiée pour des changements (lors de l'utilisation de auto_reload) - last_change : la dernière fois que la base de données a été rechargée (lors de l'utilisation de auto_reload)

Autoreload (par défaut : désactivé) :

Activer le rechargement automatique fera en sorte que nginx vérifie le temps de modification de la base de données à l'intervalle spécifié et la rechargera si elle a changé.

auto_reload <interval>

GeoIP :

$variable_name [default=<value] [source=$variable_with_ip] path ...
Si default n'est pas spécifié, la variable sera vide si non trouvée.

Si source n'est pas spécifié, $remote_addr sera utilisé pour effectuer la recherche.

Pour trouver le chemin des données que vous souhaitez (par exemple : country names en), utilisez l'outil 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>

Cela se traduit par :

$country_name "default=United States" source=$remote_addr country names en
Commandes supplémentaires :

Ces commandes fonctionnent de la même manière que l'original ngx_http_geoip_module documenté ici : http://nginx.org/en/docs/http/ngx_http_geoip_module.html#geoip_proxy.

Cependant, si vous fournissez l'option source=$variable_with_ip sur une variable, ces paramètres seront ignorés pour cette variable particulière.

geoip2_proxy < cidr >
Définit les adresses de confiance. Lorsqu'une demande provient d'une adresse de confiance, une adresse du champ d'en-tête de requête "X-Forwarded-For" sera utilisée à la place.

geoip2_proxy_recursive < on | off >
Si la recherche récursive est désactivée, alors au lieu de l'adresse client d'origine qui correspond à l'une des adresses de confiance, la dernière adresse envoyée dans "X-Forwarded-For" sera utilisée. Si la recherche récursive est activée, alors au lieu de l'adresse client d'origine qui correspond à l'une des adresses de confiance, la dernière adresse non fiable envoyée dans "X-Forwarded-For" sera utilisée.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-geoip2.