Auto updating maxmind GeoIP lookup for free and paid maxmind accounts and optional cloudflare fallback


Auto updating maxmind GeoIP lookup for free and paid maxmind accounts with optional cloudflare fallback. Leveringing the excellent node-maxmind package, maxminded provides a production oriented option that manages regular data updates. Maxminded provides fallback geoip lookup via geos-major which leverages CloudFlare request country code headers to look up geo data when maxmind has a lookup miss.

npm install maxminded

Drop in replacement of node-maxmind when using free Maxmind GeoLiteCity data.

var maxmind = require('maxminded');              // difference: require maxminded instead of maxmind 
maxmind.init('GeoLiteCity');                     // init with local data and Wednesday updates  
var location = maxmind.getLocation(''); // City/Location lookup 
var maxminded = require('maxminded');
maxminded.init({ license: 'MAXMIND_LICENSE', memoryCache: true });

This requires CloudFlare to be enabled for your domain so the cf-country header will be populated

var geo = maxminded.getLocation('', req.headers); 

Gives weekly GeoLiteCity data updates and 18,000 lookups / second as the caches are disabled

    license:     undefined,        // maxmind license key, for paid data. Ex: 'S0meK3yIdHere'
    indexCache:  false,            // use maxmind-node indexCache  at 80,000 lookups / second or
    memoryCache: false,            // use maxmind-node memoryCache at 130,000 lookups / second
    cronTime:    '00 30 03 * * 3', // run every Wednesday at 3:30am
    timeZone:    undefined,        // timezone based updates, ex: "America/Los_Angeles"
    start:       undefined,        // load immediately and callback when complete
    initLoad:    undefined,        // initialize with local data, same as init(string_filename)

For additional parameter details see: node-maxmind, node-cron and maxmind-loader

A bonus of using maxminded is that your geo data doesn't need to be pushed to your PaaS with your code deploy. The geo ip data can be pulled directly from maxmind in compressed form when your application launches.

maxminded.init({start: function() {
    var geo = maxminded.getLocation(''); // GeoCityLite loaded w/weekly updates