Skip to main content

Konfigurace GeoIP s MaxMind databázemi

Geolokační databáze MaxMind

Pro začátek si musíme založit účet pomocí kterého budeme pravidelně sbírat zdarma dostupné geolokační databáze.

  • Zaregistrovat se na stránkách MadMind a naklikat si LicenseKey pro svůj účet.

    💡 Kombinace Account ID a License key bude použita v konfiguraci služby která pravidelně stahuje nejnovější verzi databází.

  • Nainstalovat si nginx modul geoip, službu pro aktualizaci a nástroj pro hledání v databázi:

    apt -y update
    apt -y install libnginx-mod-http-geoip2 geoipupdate mmdb-bin
    
  • Nastavit Account ID a License key v /etc/GeoIP.conf. Pro databáze zdarma to vypadá např. takto:

    # GeoIP.conf file for `geoipupdate` program, for versions >= 3.1.1.
    # Used to update GeoIP databases from https://www.maxmind.com.
    # For more information about this config file, visit the docs at
    # https://dev.maxmind.com/geoip/updating-databases.
    
    # `AccountID` is from your MaxMind account.
    AccountID 11254
    
    # `LicenseKey` is from your MaxMind account.
    LicenseKey g9GJy4_ld2TWaSMQocGd3ghefgS2EVIW542f_ffs
    
    # `EditionIDs` is from your MaxMind account.
    EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
    
  • Spustit a zkontrolovat aktualizaci databází:

    systemctl start geoipupdate.service
    systemctl status geoipupdate.service
    

Nginx

Běžně loguji do JSON formátu, rozhodnutí je ale na každém z vás. Formát logu json nastavuji konfiguračním souborem /etc/nginx/conf.d/00-logformat-json.conf:

log_format json escape=none '{"time_iso8601": "$time_iso8601", "ip": "$remote_addr", "domain": "$http_host", "request": "$request", "status": "$status", "user_agent": "$http_user_agent"}';

Nastavení GeoIP a jeho logovacího formátu v JSONu dělám konfigurací v /etc/nginx/conf.d/00-geoipconf.conf

geoip2 /var/lib/GeoIP/GeoLite2-Country.mmdb {
  auto_reload 60m;
  $geoip2_metadata_country_build metadata build_epoch;
  $geoip2_data_country_code country iso_code;
  $geoip2_data_country_name country names en;
}

geoip2 /var/lib/GeoIP/GeoLite2-City.mmdb {
  auto_reload 60m;
  $geoip2_metadata_city_build metadata build_epoch;
  $geoip2_data_city_name 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;

log_format geoip escape=none '{"time_iso8601": "$time_iso8601", "ip": "$remote_addr",'
                             '"domain": "$http_host", "request": "$request",'
                             '"status": "$status", "user_agent": "$http_user_agent",'
                             '"country_code": "$geoip2_data_country_code",'
                             '"country_name": "$geoip2_data_country_name",'
                             '"city": "$geoip2_data_city_name"}';

Použití je jednoduché. Stačí u site configu nadefinovat, že se má použít formát "geoip":

access_log /var/log/nginx/access.log geoip;

⚠️ Po každé změně provést reload nebo restart serveru: systemctl reload nginx