摘要:数据库数据库之版,为了方便使用数据所封装的拓展包。使用方式本脚本封装了的主要接口配制好后就可以直接使用,并不需要再去复杂的内部实现。同样希望这个脚本能提供给官方推荐脚本。
openResty IP数据库
ipip.net IP数据库之openresty版,为了方便nginx使用ip 数据所封装的拓展包。
使用方式本脚本封装了ipip.net的主要接口配制好后就可以直接使用,并不需要再去复杂的内部实现。
需要注意的是如果使用api访问需要http拓展包。
代码我已提交至GitHub: https://github.com/icowan/lua-resty-17mon
如果对lua不了解请看我前段时间写的: 《Lua基础学习方式 (一天学会) 》
如果还没安装openresty请看: 《优雅的安装openresty 》
`
nginx 配制要使用首先得载入自己写义的lualib,这个根据你安装的或使用方式去修改路径。
lua_package_path "/usr/local/openresty/lualib/?.lua;/var/www/lua-resty-17mon/lualib/?.lua;;"; lua_package_cpath "/usr/local/openresty/lualib/?.so;;"; error_log /var/www/lua-resty-17mon/logs/lua-resty-17mon.debug.log debug; server { listen 8080; server_name localhost; charset utf-8; location /ipLocation { resolver 8.8.8.8; # 如果要使用api的话 需要dns 这可以改成中国的会快一些 default_type "text/plain"; content_by_lua_file "/var/www/lua-resty-17mon/script/ip_location.lua"; } }lua 脚本使用
-- /var/www/lua-resty-17mon/script/ip_location.lua ngx.req.read_body() ngx.header.content_type = "application/json;charset=UTF-8" local cjson = require "cjson" local success = function(con) return cjson.encode({ success = true, body = con }) end local failure = function(err) return cjson.encode({ success = false, errors = err }) end -- 参数获取 local request_args = ngx.req.get_uri_args() local ip_address = request_args["ip"] -- 如果不需要验证可以不用此拓展 local checkIp = require("ip_check"):new(ip_address) -- 验证ip local ok, err = checkIp:checkIp() if not ok then ngx.say(failure(err)) return end -- 使用本地数据库 local ipdetail, err = require("ip_location"):new(ip_address, "/var/www/lua-resty-17mon/file/17monipdb.dat") if not ipdetail then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end local ipLocation, err = ipdetail:location() if not ipLocation then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end ngx.say(success(ipLocation))通过免费api获取ip信息
如果通过api获取数据需要使用http服务,这里需要使用lua-resty-http
这里我已经把它直接放到lualib/resty目录了,可以直接使用 感谢pintsized提供的脚本
-- /var/www/lua-resty-17mon/script/ip_location.lua local ipdetail, err = require("ip_location"):new(ip_address) if not ipdetail then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end local ipLocation, err = ipdetail:locationApiFree() if not ipLocation then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end ngx.say(success(ipLocation))通过付费api获取ip信息
-- /var/www/lua-resty-17mon/script/ip_location.lua local ipdetail, err = require("ip_location"):new(ip_address, "", "your token") if not ipdetail then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end local ipLocation, err = ipdetail:locationApiFree() if not ipLocation then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end ngx.say(success(ipLocation))获取aip使用状态
-- /var/www/lua-resty-17mon/script/ip_location.lua local ipdetail, err = require("ip_location"):new(ip_address, "your token") if not ipdetail then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end local ipLocation, err = ipdetail:apiStatus() if not ipLocation then ngx.log(ngx.ERR, err) ngx.say(failure(err)) return end ngx.say(success(ipLocation))返回数据结构
Response
返回类型: JSON
参数 | 类型 | 备注 |
---|---|---|
success | bool | true or false |
errors or body | string | 当success为false时errors有值否则返回body |
body返回参数详情
参数 | 类型 | 备注 |
---|---|---|
country | string | 国家 |
city | string | 省会或直辖市(国内) |
region | string | 地区或城市 (国内) |
place | string | 学校或单位 (国内) |
operator | string | 运营商字段 |
latitude | string | 纬度 |
longitude | string | 经度 |
timeZone | string | 时区一, 可能不存在 |
timeZoneCode | string | 时区码 |
administrativeAreaCode | string | 中国行政区划代码 |
internationalPhoneCode | string | 国际电话代码 |
countryTwoDigitCode | string | 国家二位代码 |
worldContinentCode | string | 世界大洲代码 |
返回结果参考:
{ "success": true, "body": { "country": "", // 国家 "city": "", // 省会或直辖市(国内) "region": "", // 地区或城市 (国内) "place": "", // 学校或单位 (国内) "operator": "", // 运营商字段(只有购买了带有运营商版本的数据库才会有) "latitude": "", // 纬度 (每日版本提供) "longitude": "", // 经度 (每日版本提供) "timeZone": "", // 时区一, 可能不存在 (每日版本提供) "timeZoneCode": "", // 时区码, 可能不存在 (每日版本提供) "administrativeAreaCode": "", // 中国行政区划代码 (每日版本提供) "internationalPhoneCode": "", // 国际电话代码 (每日版本提供) "countryTwoDigitCode": "", // 国家二位代码 (每日版本提供) "worldContinentCode": "" // 世界大洲代码 (每日版本提供) } }
ERROR结果参考
{ "success": false, "erros": "retun messages..." }
查询状态结果参考
{ "success": true, "body": { "limit": false, // 是否已受访问限制 "hour": 99680, // 一个小时内剩余次数 "day": 999680, // 24小时内剩余次数 } }尾巴
难得为开源社区贡献一份力量,希望有同样需求的同学们可以不用再去写复杂的底层逻辑,应该更多的把时间估计业务流程上。
同样希望这个脚本能提供给ipip.net官方推荐脚本。
或访问我 网站: LatteCake
本文地址: http://lattecake.com/post/20102
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39376.html
摘要:运行容器意外的官方参考地址,多次尝试命令最终无法运行,带项时后是状态,修改配置没反应日志无报错退出。目前容器整体情况是主从,个相同一个。后续运行的容器数视情况而定。接下来计划针对,一些实际应用场景进行实践验证。 目标需求: 密码登录+容器数据共享,主从复制 1.配置启动 添加配置文件夹,组织容器命令。 a.官方未提供相关信息 从测试容器中匹配搜索得到 mongod.conf.orig,...
摘要:下使用快速搭建灰度网关简介是新浪开源的一个可以动态设置分流策略的灰度发布系统,工作在层,基于和开发,使用作为分流策略数据库,可以实现动态调度功能。目前在京东如实时价格秒杀动态服务单品页列表页等都在使用架构,其他公司如淘宝去哪儿网等。 Mac下使用ABTestingGateway快速搭建灰度网关 ABTestingGateway简介 ABTestingGateway 是新浪开源的一个可以...
摘要:云帮所有的对外服务都配置在负载均衡上,都是通过负载均衡转发到对应的应用与服务。大概的操作流程如下那么接下来就说说如何具体去配置。测试即可,如果多节点配置直接配置就了。配置到这里,云帮已经配置完成了。 序 相关组件介绍 本次分享主要涉及到两个模块console模块和openresty模块。 console模块 即云帮(ACP)控制台模块,为用户提供可视化Web操作界面,监听443端口即可...
摘要:说明防止注入,本地包含,部分溢出,测试,等攻击防止备份之类文件泄漏防止之类压力测试工具的攻击屏蔽常见的扫描黑客工具,扫描器屏蔽异常的网络请求屏蔽图片附件类目录执行权限防止上传下载使用使用安装下载解压后,将整放到目录中,并命名为配置安装路径假 1. Ngx lua waf 说明 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击防止svn/备份之类文件泄...
阅读 2595·2021-11-11 16:55
阅读 1259·2021-09-22 15:25
阅读 1766·2019-08-29 16:26
阅读 865·2019-08-29 13:21
阅读 2286·2019-08-23 16:19
阅读 2781·2019-08-23 15:10
阅读 741·2019-08-23 14:24
阅读 1829·2019-08-23 13:48