lua-resty-maxminddb

用于读取 MaxMind 地理位置数据库的 Lua 库

$ opm get anjia0532/lua-resty-maxminddb

名称

lua-resty-maxminddb - 用于读取 MaxMind 地理位置数据库格式(也称为 mmdb 或 geoip2)的 Lua 库。

先决条件

错误修复

侵权道歉

  • https://github.com/anjia0532/lua-resty-maxminddb/issues/25

注意

  • [maxmind/libmaxminddb][]

  • [openresty][]

  • [GeoLite2 免费可下载数据库][linkGeolite2FreeDownloadableDatabases]

  • [maxmind/geoipupdate][]

安装

    opm get anjia0532/lua-resty-maxminddb

摘要

      local cjson = require 'cjson'
      local geo = require 'resty.maxminddb'
      if not geo.initted() then
          geo.init("/path/to/GeoLite2-City.mmdb")
      end
      local res,err = geo.lookup(ngx.var.arg_ip or ngx.var.remote_addr) --support ipv6 e.g. 2001:4860:0:1001::3004:ef68
    
      if not res then
          ngx.log(ngx.ERR,'failed to lookup by ip ,reason:',err)
      end
    
      ngx.say("full :",cjson.encode(res))
      if ngx.var.arg_node then
         ngx.say("node name:",ngx.var.arg_node," ,value:", cjson.encode(res[ngx.var.arg_node] or {}))
      end


      #ipv4
      $ curl localhost/ip=114.114.114.114&node=city
      #ipv6
      #$ curl localhost/ip=2001:4860:0:1001::3004:ef68&node=country
      full :{"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"}}
      node name:city ,value:{"geoname_id":1799962,"names":{"en":"Nanjing","ru":"Нанкин","fr":"Nankin","pt-BR":"Nanquim","zh-CN":"南京","es":"Nankín","de":"Nanjing","ja":"南京市"}}

美化

    full: {
        "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"
        }
    }
    node name: city, value: {
        "geoname_id": 1799962,
        "names": {
            "en": "Nanjing",
            "ru": "Нанкин",
            "fr": "Nankin",
            "pt-BR": "Nanquim",
            "zh-CN": "南京",
            "es": "Nankín",
            "de": "Nanjing",
            "ja": "南京市"
        }
    }
    

参考

  • [GeoIP2 城市和国家 CSV 数据库][linkGeoip2CityAndCountryCsvDatabases]

  • [lilien1010/lua-resty-maxminddb][]

  • [maxmind/libmaxminddb#source#lookup_and_print][]

  • [maxmind/libmaxminddb#source#dump_entry_data_list][]

错误报告

请通过在我们的 GitHub 问题跟踪器中提交问题来报告错误,网址为 https://github.com/anjia0532/lua-resty-maxminddb/issues

如果错误是由 libmaxminddb 引起的,请在 https://github.com/maxmind/libmaxminddb/issues 中提交问题。

版权和许可

此模块根据 apache LICENSE-2.0 许可证授权。

版权所有 2017 年至今 anjia (anjia0532@gmail.com)

根据 Apache 许可证 2.0 版(“许可证”)授权;

除非符合许可证的规定,否则不得使用此文件。

您可以在以下网址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或以书面形式达成协议,否则根据许可证分发的软件

按“原样”分发,

不提供任何明示或暗示的担保或条件。

请参阅许可证以了解管理权限和

许可证的限制。

[maxmind/libmaxminddb]: https://github.com/maxmind/libmaxminddb [openresty]: https://openresty.org.cn/en/installation.html [linkGeolite2FreeDownloadableDatabases]: http://dev.maxmind.com/geoip/geoip2/geolite2/ [maxmind/geoipupdate]: https://github.com/maxmind/geoipupdate [linkGeoip2CityAndCountryCsvDatabases]: https://dev.maxmind.com/geoip/geoip2/geoip2-city-country-csv-databases/ [maxmind/libmaxminddb#source#lookup_and_print]: https://github.com/maxmind/libmaxminddb/blob/master/bin/mmdblookup.c#L262 [maxmind/libmaxminddb#source#dump_entry_data_list]: https://github.com/maxmind/libmaxminddb/blob/master/src/maxminddb.c#L1938 [lilien1010/lua-resty-maxminddb]: https://github.com/lilien1010/lua-resty-maxminddb

作者

安佳(anjia0532@gmail.com)

许可证

2bsd

版本