maxminddb: Eine Lua-Bibliothek zum Lesen der Geolocation-Datenbank von MaxMind
Installation
Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-maxminddb
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-maxminddb
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-maxminddb v1.3.7, veröffentlicht am 08. Dezember 2025.
Hinweis - [maxmind/libmaxminddb][]
-
[openresty][]
-
[GeoLite2 Free Downloadable Databases][linkGeolite2FreeDownloadableDatabases]
-
[maxmind/geoipupdate][]
Neue Funktionen
- Unterstützung mehrerer Datenbanken: Initialisieren und Verwenden mehrerer MaxMind-Datenbanken gleichzeitig
- Profilwahl: Wählen Sie, welche Datenbank mit Profilnamen abgefragt werden soll
- Automatischer Fallback: Verwendet die erste verfügbare Datenbank, wenn kein Profil angegeben ist
Fehlerbehebungen
API-Referenz
Funktionen:
- geo.init(profiles): Initialisiert Datenbanken mit Profilnamen und Dateipfaden
- geo.lookup(ip, lookup_path, profile): Sucht die IP-Adresse, optional Profil angeben
- geo.initted(): Überprüft, ob die Datenbanken initialisiert sind
- geo.get_profiles(): Gibt eine Liste der verfügbaren Profilnamen zurück
- geo.has_profile(profile): Überprüft, ob ein bestimmtes Profil existiert
Entschuldigung für Verstöße - https://github.com/anjia0532/lua-resty-maxminddb/issues/25
opm (manuelle Installation von libmaxminddb und Download von GeoLite2-City.mmdb)
openresty/openresty:alpine und apache/apisix:2.13.0-alpine Docker-Image müssen perl libmaxminddb installieren
z.B. apk --no-cache add perl libmaxminddb && ln -s /usr/lib/libmaxminddb.so.0 /usr/lib/libmaxminddb.so
opm get anjia0532/lua-resty-maxminddb
openresty/openresty:alpine-fat Docker-Image
luarocks install lua-resty-maxminddb
openresty/openresty:alpine Docker-Image muss luarocks installieren (siehe https://github.com/openresty/docker-openresty/blob/master/alpine/Dockerfile.fat)
spezielles apache/apisix:2.xx.0-alpine luarocks install lua-resty-maxminddb UNZIP=/usr/bin/unzip
z.B. apk --no-cache add perl alpine-sdk && luarocks install lua-resty-maxminddb UNZIP=/usr/bin/unzip
## Synopsis
**Grundlegende Verwendung (Einzelne Datenbank)**
```lua
local geo = require 'resty.maxminddb'
if not geo.initted() then
geo.init("/path/to/GeoLite2-City.mmdb")
end
local res, err = geo.lookup("8.8.8.8")
Unterstützung mehrerer Datenbanken
local geo = require 'resty.maxminddb'
if not geo.initted() then
geo.init({
city = "/path/to/GeoLite2-City.mmdb",
country = "/path/to/GeoLite2-Country.mmdb",
asn = "/path/to/GeoLite2-ASN.mmdb"
})
end
-- Suche mit dem Standardprofil (dem ersten)
local res, err = geo.lookup("8.8.8.8")
-- Oder ein bestimmtes Profil angeben
local city_data, err = geo.lookup("8.8.8.8", nil, "city")
local country_data, err = geo.lookup("8.8.8.8", nil, "country")
local asn_data, err = geo.lookup("8.8.8.8", nil, "asn")
Vollständiges Nginx-Beispiel
server {
listen 80;
server_name localhost;
location / {
content_by_lua_block{
local cjson = require 'cjson'
local geo = require 'resty.maxminddb'
if not geo.initted() then
geo.init({
city = "/path/to/GeoLite2-City.mmdb",
country = "/path/to/GeoLite2-Country.mmdb"
})
end
-- Suche mit dem Standardprofil (dem ersten)
local res,err = geo.lookup(ngx.var.arg_ip or ngx.var.remote_addr)
-- Unterstützung mehrerer Datenbanken
-- local res,err = geo.lookup(ngx.var.arg_ip or ngx.var.remote_addr, nil, ngx.var.arg_type or 'city')
if not res then
ngx.log(ngx.ERR,'Fehler bei der IP-Suche, Grund:',err)
end
ngx.say("voll :",cjson.encode(res))
if ngx.var.arg_node then
ngx.say("Knotenname:",ngx.var.arg_node," ,Wert:", cjson.encode(res[ngx.var.arg_node] or {}))
end
}
}
}
#ipv4
$ curl "http://localhost/?ip=114.114.114.114&node=city&type=city"
#ipv6
#$ curl "http://localhost/?ip=2001:4860:0:1001::3004:ef68&node=country"
voll :{"city":{"geoname_id":1799962,"names":{"en":"Nanjing","ru":"Нанкин","fr":"Nankin","pt-BR":"Nanquim","zh-CN":"南京","es":"Nankín","de":"Nanjing","ja":"南京市"}},"subdivisions":[{"geoname_id":1806260,"names":{"en":"Jiangsu","fr":"Province de Jiangsu","zh-CN":"江苏省"},"iso_code":"32"}],"country":{"geoname_id":1814991,"names":{"en":"China","ru":"Китай","fr":"Chine","pt-BR":"China","zh-CN":"中国","es":"China","de":"China","ja":"中国"},"iso_code":"CN"},"registered_country":{"geoname_id":1814991,"names":{"en":"China","ru":"Китай","fr":"Chine","pt-BR":"China","zh-CN":"中国","es":"China","de":"China","ja":"中国"},"iso_code":"CN"},"location":{"time_zone":"Asia\/Shanghai","longitude":118.7778,"accuracy_radius":50,"latitude":32.0617},"continent":{"geoname_id":6255147,"names":{"en":"Asia","ru":"Азия","fr":"Asie","pt-BR":"Ásia","zh-CN":"亚洲","es":"Asia","de":"Asien","ja":"アジア"},"code":"AS"}}
Knotenname:city ,Wert:{"geoname_id":1799962,"names":{"en":"Nanjing","ru":"Нанкин","fr":"Nankin","pt-BR":"Nanquim","zh-CN":"南京","es":"Nankín","de":"Nanjing","ja":"南京市"}}
prettify
voll: {
"city": {
"geoname_id": 1799962,
"names": {
"en": "Nanjing",
"ru": "Нанкин",
"fr": "Nankin",
"pt-BR": "Nanquim",
"zh-CN": "南京",
"es": "Nankín",
"de": "Nanjing",
"ja": "南京市"
}
},
"subdivisions": [{
"geoname_id": 1806260,
"names": {
"en": "Jiangsu",
"fr": "Province de Jiangsu",
"zh-CN": "江苏省"
},
"iso_code": "32"
}
],
"country": {
"geoname_id": 1814991,
"names": {
"en": "China",
"ru": "Китай",
"fr": "Chine",
"pt-BR": "China",
"zh-CN": "中国",
"es": "China",
"de": "China",
"ja": "中国"
},
"iso_code": "CN"
},
"registered_country": {
"geoname_id": 1814991,
"names": {
"en": "China",
"ru": "Китай",
"fr": "Chine",
"pt-BR": "China",
"zh-CN": "中国",
"es": "China",
"de": "China",
"ja": "中国"
},
"iso_code": "CN"
},
"location": {
"time_zone": "Asia\/Shanghai",
"longitude": 118.7778,
"accuracy_radius": 50,
"latitude": 32.0617
},
"continent": {
"geoname_id": 6255147,
"names": {
"en": "Asia",
"ru": "Азия",
"fr": "Asie",
"pt-BR": "Ásia",
"zh-CN": "亚洲",
"es": "Asia",
"de": "Asien",
"ja": "アジア"
},
"code": "AS"
}
}
Knotenname: city, Wert: {
"geoname_id": 1799962,
"names": {
"en": "Nanjing",
"ru": "Нанкин",
"fr": "Nankin",
"pt-BR": "Nanquim",
"zh-CN": "南京",
"es": "Nankín",
"de": "Nanjing",
"ja": "南京市"
}
}
Referenzen
- [GeoIP2 City and Country CSV Databases][linkGeoip2CityAndCountryCsvDatabases]
- [lilien1010/lua-resty-maxminddb][]
- [maxmind/libmaxminddb#source#lookup_and_print][]
- [maxmind/libmaxminddb#source#dump_entry_data_list][]
Fehlerberichte
Bitte melden Sie Fehler, indem Sie ein Problem mit unserem GitHub-Issue-Tracker unter https://github.com/anjia0532/lua-resty-maxminddb/issues einreichen.
Wenn der Fehler durch libmaxminddb verursacht wird, verwenden Sie den Tracker unter https://github.com/maxmind/libmaxminddb/issues.
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-maxminddb.