IP Based Geographic Lookups¶
Packages: GeoIP2 C API & Library libmaxminddb
mod_maxminddb is a module for fast ip/location lookups, available since lighttpd 1.4.54. It uses MaxMind GeoIP2 databases. If the IP was found in the database, the module sets the appropriate environment variables to the request, thus making this information available to other modules/fcgi.
mod_maxminddb consumes MaxMind GeoIP2 databases. This is the successor to GeoIP Legacy databases. GeoIP Legacy databases were discontinued 2 Jan 2019 (https://dev.maxmind.com/geoip/legacy/release-notes/) and mod_geoip is now deprecated.
Note: mod_maxminddb before lighttpd 1.4.70 expects a single client per connection and caches the geoip database lookup per-connection; mod_maxminddb before lighttpd 1.4.70 does not expect the IP to change between requests on the same connection. In lighttpd 1.4.70 and later, mod_maxminddb can be used with mod_extforward to handle connections from a load balancer configured to reuse connections for multiple clients. Before lighttpd 1.4.70, mod_maxminddb should be used with load balancers configured to be safe, reusing a connection only for the same client, not for different clients. Alternatively, instead of mod_extforward and mod_maxminddb, mod_magnet with a lua script can parse the
X-Forwarded-For or other request header and then query maxminddb.
maxminddb.activate = "enable" (default: "disable")
maxminddb.db = "/path/to/the/GeoIP2/database.mmdb"
maxminddb.env = (...) - list of environment variables to set and associated lookup keys in GeoIP2 .mmdb.
maxminddb.env = (
"GEOIP_COUNTRY_CODE" => "country/iso_code",
"GEOIP_COUNTRY_NAME" => "country/names/en",
"GEOIP_CITY_NAME" => "city/names/en",
"GEOIP_CITY_LATITUDE" => "location/latitude",
"GEOIP_CITY_LONGITUDE" => "location/longitude",
Redirecting based on GeoIP2 data can be performed inside lighttpd using mod_magnet or using backend CGI, FastCGI, SCGI, etc.