Manipulations effectuées et testées sur Ubuntu.
> lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
Préambule
Tutoriel explicatif pour l'installation d'un module de geolocalisation par ip avec nginx
Module nginx à installer : (qui n'est que compatible avec GeoIP Legacy, et non GeoIP2, la nouvelle version disponible sur maxmind.com)
Malheureusement, les nouvelles bases de données GeoIP2(GeoLite2) requièrent forcément de build nginx à partir des sources pour profiter du module nginx-module-geoip.
Ce qui ne nous intéresse pas ici.
Nous verrons qu'il est possible de soit, transformer les dernières bases de données GeoIP2 en Legacy, soit de les télécharger directement depuis un site.
Je conseil personnellement de les télécharger 'officiellement' (depuis maxmind.com) puis de les transformer soit même.
Nous allons utiliser le module nginx-module-geoip
, qui lui ne requiert pas de build nginx à partir des sources, en revanche il ne supporte que les données au format GeoIP Legacy et non GeoIP2.
Il existe donc deux moyens de récupérer les bases de données :
- En passant par le site web de maxmind (Requiert de créer un compte, et ils fournissent plus les bases de données GeoIP Legacy), puis transformer ces bases de données en GeoIP Legacy avec l'outil Python disponible sur Github
- Télécharger directement les bases de données depuis le site https://miyuru.lk/geoiplegacy
(J'ai personnellement opté pour le téléchargement depuis maxmind.com et transformer les bases de données avec l'outil Python car les bases de miyuru.lk ne fonctionnaient pas chez moi)
Téléchargement des bases de données
Deux choix s'offrent à vous :
- Télécharger directement les bases de données GeoIP2(GeoLite2) mais qui ont déjà été convertis en GeoIP Legacy depuis le site de Miyuru : https://www.miyuru.lk/geoiplegacy
- Ou faire comme moi : Télécharger directement les bases de données depuis (Création d'un compte obligatoire) maxmind.com et les transformer avec l'outil Python disponible sur Github sherpya/geolite2legacy (Compatible avec Python 2.7 et 3.5+)
Une fois vos fichiers récupérés, vous pouvez les placer où bon vous semble, ici ce sera dans /etc/nginx/geoip/
Mise en place sur nginx
Documentation nginx sur le module http_geoip_module : https://nginx.org/en/docs/http/ngx_http_geoip_module.html
Téléchargez avec APT le module libnginx-mod-http-geoip
apt install libnginx-mod-http-geoip
Au début de votre nginx.conf
, hors du bloc http
, chargez les modules
load_module modules/ngx_http_geoip_module.so;
load_module modules/ngx_stream_geoip_module.so;
Dans le bloc http
, ajoutez ces deux lignes pour indiquer ou sont les données à nginx
geoip_country /etc/nginx/geoip/GeoLite2Legacy-Country.dat;
geoip_city /etc/nginx/geoip/GeoLite2Legacy-City.dat;
Vous pouvez alors utiliser les variables $geoip
(Voir la documentation officiel)
Notre bloc http ressemblera à ceci
http {
...
geoip_country /etc/nginx/geoip/GeoLite2Legacy-Country.dat;
geoip_city /etc/nginx/geoip/GeoLite2Legacy-City.dat;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" '
'$geoip_country_name $geoip_country_code '
'$geoip_city';
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/custom_access.log custom;
...
Suite de votre bloc http
Les logs d'accès seront alors enregistrés deux fois, une fois dans le 'normal' (main) et une seconde fois dans custom_access.log (custom). Ceci n'est qu'à titre d'exemple / test, à vous de configurer comme bon vous semble.