摘要:數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)之版,為了方便使用數(shù)據(jù)所封裝的拓展包。使用方式本腳本封裝了的主要接口配制好后就可以直接使用,并不需要再去復(fù)雜的內(nèi)部實(shí)現(xiàn)。同樣希望這個(gè)腳本能提供給官方推薦腳本。
openResty IP數(shù)據(jù)庫(kù)
ipip.net IP數(shù)據(jù)庫(kù)之openresty版,為了方便nginx使用ip 數(shù)據(jù)所封裝的拓展包。
使用方式本腳本封裝了ipip.net的主要接口配制好后就可以直接使用,并不需要再去復(fù)雜的內(nèi)部實(shí)現(xiàn)。
需要注意的是如果使用api訪問(wèn)需要http拓展包。
代碼我已提交至GitHub: https://github.com/icowan/lua-resty-17mon
如果對(duì)lua不了解請(qǐng)看我前段時(shí)間寫(xiě)的: 《Lua基礎(chǔ)學(xué)習(xí)方式 (一天學(xué)會(huì)) 》
如果還沒(méi)安裝openresty請(qǐng)看: 《優(yōu)雅的安裝openresty 》
`
nginx 配制要使用首先得載入自己寫(xiě)義的lualib,這個(gè)根據(jù)你安裝的或使用方式去修改路徑。
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 這可以改成中國(guó)的會(huì)快一些 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 -- 參數(shù)獲取 local request_args = ngx.req.get_uri_args() local ip_address = request_args["ip"] -- 如果不需要驗(yàn)證可以不用此拓展 local checkIp = require("ip_check"):new(ip_address) -- 驗(yàn)證ip local ok, err = checkIp:checkIp() if not ok then ngx.say(failure(err)) return end -- 使用本地?cái)?shù)據(jù)庫(kù) 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))通過(guò)免費(fèi)api獲取ip信息
如果通過(guò)api獲取數(shù)據(jù)需要使用http服務(wù),這里需要使用lua-resty-http
這里我已經(jīng)把它直接放到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))通過(guò)付費(fèi)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使用狀態(tài)
-- /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))返回?cái)?shù)據(jù)結(jié)構(gòu)
Response
返回類型: JSON
參數(shù) | 類型 | 備注 |
---|---|---|
success | bool | true or false |
errors or body | string | 當(dāng)success為false時(shí)errors有值否則返回body |
body返回參數(shù)詳情
參數(shù) | 類型 | 備注 |
---|---|---|
country | string | 國(guó)家 |
city | string | 省會(huì)或直轄市(國(guó)內(nèi)) |
region | string | 地區(qū)或城市 (國(guó)內(nèi)) |
place | string | 學(xué)校或單位 (國(guó)內(nèi)) |
operator | string | 運(yùn)營(yíng)商字段 |
latitude | string | 緯度 |
longitude | string | 經(jīng)度 |
timeZone | string | 時(shí)區(qū)一, 可能不存在 |
timeZoneCode | string | 時(shí)區(qū)碼 |
administrativeAreaCode | string | 中國(guó)行政區(qū)劃代碼 |
internationalPhoneCode | string | 國(guó)際電話代碼 |
countryTwoDigitCode | string | 國(guó)家二位代碼 |
worldContinentCode | string | 世界大洲代碼 |
返回結(jié)果參考:
{ "success": true, "body": { "country": "", // 國(guó)家 "city": "", // 省會(huì)或直轄市(國(guó)內(nèi)) "region": "", // 地區(qū)或城市 (國(guó)內(nèi)) "place": "", // 學(xué)?;騿挝?(國(guó)內(nèi)) "operator": "", // 運(yùn)營(yíng)商字段(只有購(gòu)買了帶有運(yùn)營(yíng)商版本的數(shù)據(jù)庫(kù)才會(huì)有) "latitude": "", // 緯度 (每日版本提供) "longitude": "", // 經(jīng)度 (每日版本提供) "timeZone": "", // 時(shí)區(qū)一, 可能不存在 (每日版本提供) "timeZoneCode": "", // 時(shí)區(qū)碼, 可能不存在 (每日版本提供) "administrativeAreaCode": "", // 中國(guó)行政區(qū)劃代碼 (每日版本提供) "internationalPhoneCode": "", // 國(guó)際電話代碼 (每日版本提供) "countryTwoDigitCode": "", // 國(guó)家二位代碼 (每日版本提供) "worldContinentCode": "" // 世界大洲代碼 (每日版本提供) } }
ERROR結(jié)果參考
{ "success": false, "erros": "retun messages..." }
查詢狀態(tài)結(jié)果參考
{ "success": true, "body": { "limit": false, // 是否已受訪問(wèn)限制 "hour": 99680, // 一個(gè)小時(shí)內(nèi)剩余次數(shù) "day": 999680, // 24小時(shí)內(nèi)剩余次數(shù) } }尾巴
難得為開(kāi)源社區(qū)貢獻(xiàn)一份力量,希望有同樣需求的同學(xué)們可以不用再去寫(xiě)復(fù)雜的底層邏輯,應(yīng)該更多的把時(shí)間估計(jì)業(yè)務(wù)流程上。
同樣希望這個(gè)腳本能提供給ipip.net官方推薦腳本。
或訪問(wèn)我 網(wǎng)站: LatteCake
本文地址: http://lattecake.com/post/20102
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39376.html
摘要:運(yùn)行容器意外的官方參考地址,多次嘗試命令最終無(wú)法運(yùn)行,帶項(xiàng)時(shí)后是狀態(tài),修改配置沒(méi)反應(yīng)日志無(wú)報(bào)錯(cuò)退出。目前容器整體情況是主從,個(gè)相同一個(gè)。后續(xù)運(yùn)行的容器數(shù)視情況而定。接下來(lái)計(jì)劃針對(duì),一些實(shí)際應(yīng)用場(chǎng)景進(jìn)行實(shí)踐驗(yàn)證。 目標(biāo)需求: 密碼登錄+容器數(shù)據(jù)共享,主從復(fù)制 1.配置啟動(dòng) 添加配置文件夾,組織容器命令。 a.官方未提供相關(guān)信息 從測(cè)試容器中匹配搜索得到 mongod.conf.orig,...
摘要:下使用快速搭建灰度網(wǎng)關(guān)簡(jiǎn)介是新浪開(kāi)源的一個(gè)可以動(dòng)態(tài)設(shè)置分流策略的灰度發(fā)布系統(tǒng),工作在層,基于和開(kāi)發(fā),使用作為分流策略數(shù)據(jù)庫(kù),可以實(shí)現(xiàn)動(dòng)態(tài)調(diào)度功能。目前在京東如實(shí)時(shí)價(jià)格秒殺動(dòng)態(tài)服務(wù)單品頁(yè)列表頁(yè)等都在使用架構(gòu),其他公司如淘寶去哪兒網(wǎng)等。 Mac下使用ABTestingGateway快速搭建灰度網(wǎng)關(guān) ABTestingGateway簡(jiǎn)介 ABTestingGateway 是新浪開(kāi)源的一個(gè)可以...
摘要:云幫所有的對(duì)外服務(wù)都配置在負(fù)載均衡上,都是通過(guò)負(fù)載均衡轉(zhuǎn)發(fā)到對(duì)應(yīng)的應(yīng)用與服務(wù)。大概的操作流程如下那么接下來(lái)就說(shuō)說(shuō)如何具體去配置。測(cè)試即可,如果多節(jié)點(diǎn)配置直接配置就了。配置到這里,云幫已經(jīng)配置完成了。 序 相關(guān)組件介紹 本次分享主要涉及到兩個(gè)模塊console模塊和openresty模塊。 console模塊 即云幫(ACP)控制臺(tái)模塊,為用戶提供可視化Web操作界面,監(jiān)聽(tīng)443端口即可...
摘要:說(shuō)明防止注入,本地包含,部分溢出,測(cè)試,等攻擊防止備份之類文件泄漏防止之類壓力測(cè)試工具的攻擊屏蔽常見(jiàn)的掃描黑客工具,掃描器屏蔽異常的網(wǎng)絡(luò)請(qǐng)求屏蔽圖片附件類目錄執(zhí)行權(quán)限防止上傳下載使用使用安裝下載解壓后,將整放到目錄中,并命名為配置安裝路徑假 1. Ngx lua waf 說(shuō)明 防止sql注入,本地包含,部分溢出,fuzzing測(cè)試,xss,SSRF等web攻擊防止svn/備份之類文件泄...
閱讀 2650·2021-11-11 16:55
閱讀 1285·2021-09-22 15:25
閱讀 1804·2019-08-29 16:26
閱讀 983·2019-08-29 13:21
閱讀 2313·2019-08-23 16:19
閱讀 2802·2019-08-23 15:10
閱讀 773·2019-08-23 14:24
閱讀 1857·2019-08-23 13:48