No description
Find a file
Andrei Belov 4a0ca82b79 Added stream support
nginx/1.11.2 or newer is required in order to get geoip2 support
within stream {} context.
2016-10-27 18:09:39 +03:00
config Added stream support 2016-10-27 18:09:39 +03:00
LICENSE Initial commit 2014-01-30 23:00:34 +00:00
ngx_http_geoip2_module.c Added optional source=<variable> setting to allow lookups on 2016-06-19 23:34:12 +01:00
ngx_stream_geoip2_module.c Added stream support 2016-10-27 18:09:39 +03:00
README.md Added optional source=<variable> setting to allow lookups on 2016-06-19 23:34:12 +01:00

Description

ngx_http_geoip2_module - creates variables with values from the maxmind geoip2 databases based on the client IP (supports both IPv4 and IPv6)

Installing

First install libmaxminddb as described in its README.md file.

Download nginx source

wget http://nginx.org/download/nginx-VERSION.tar.gz
tar zxvf nginx-VERSION.tar.gz
cd nginx-VERSION
To build as a dynamic module (nginx 1.9.11+):
./configure --add-dynamic-module=/path/to/ngx_http_geoip2_module
make
make install

This will produce objs/ngx_http_geoip2_module.so. It can be copied to your nginx module path manually if you wish.

Add the following line to your nginx.conf:

load_module modules/ngx_http_geoip2_module.so;
To build as a static module:
./configure --add-module=/path/to/ngx_http_geoip2_module
make 
make install

Download Maxmind GeoLite2 Database (optional)

The free GeoLite2 databases are available from Maxminds website

GeoLite2 City GeoLite2 Country

Example Usage:

http {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        $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;
    ....
}

To find the path of the data you want (eg: city names en), use the mmdblookup tool:

$ 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>