搭建基于MaxMind-GeoIP库的IP查询API及网站

如果自己没有服务器,可直接部署到cloudflare和render上。
具体见另一篇:0成本 搭建基于MaxMind-GeoIP库的IP查询API及网站

一、介绍

1、功能
 获取本机或指定IP所在的IP段、ASN、城市、经度、纬度、子区域、省市区、注册国家。
 定期(每周)更新GeoLite2库。
 支持自定义City.mmdb远程地址。
 项目地址:https://github.com/deanxv/go-geoip
2、接口文档
http://<ip>:<port>/swagger/index.html
3、如何使用
部署后访问http://<ip>:<port>/swagger/index.html查看接口文档。[可选]
使用/ip接口查询IP信息。例如:http://<ip>:<port>/ip
使用/ip/{ip}接口查询指定IP信息。例如:http://<ip>:<port>/ip/8.8.8.8

二、安装部署

1、 Docker 一键部署(搭建时要挂proxy,不然环境中的github链接易出错)
docker run --name go-geoip -d --restart always \
-p 7099:7099 \
-v /data/go-geoip:/app/go-geoip/data \
-e API_SECRET="123456" \   #[可选,建议删除本行]api调用时,请求头校验的秘钥(如使用,要保证前后端统一)
-e TZ=Asia/Shanghai \
deanxv/go-geoip
******************
ad80a1/go-geoip  #  库文件 已经修改成 http://u.huaxi.us:8088/no-del/
2、环境变量
PORT=7099 [可选]服务端口
API_SECRET=123456 [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔)(请求header中增加 Authorization:Bearer 123456)
CITY_DB_REMOTE_URL=https://xxx.com/GeoIP2-City.mmdb [可选]city.mmdb远程地址
3、访问API
因为有秘钥,不能直接访问,到这一步说明基本没问题了,如果查询页面是纯静态,就别搞密钥了,毫无意义;
api这里我加了waf,能防御轻量的cc,可避免服务轻易挂掉。
绑定域名后,通过SSH测试
curl -X GET "https://ipapi.****.net/ip" -H "Authorization: Bearer S****"   #将S****替换成自己的密钥

三、前端代码

1、代码部分
下载ipchaxun.html文件,可以在本地浏览器中直接打开,或上传到服务器端
代码都放到gitee上,速度比较快 https://gitee.com/cncsrf/ipcahxun

workers.js            #在cloudflare workers上粘贴该JS代码,然后部署即可,记得绑定自己的域名,CF分配的域名在国内访问不稳定
ipchaxun.html         #纯静态的,不依赖CF环境,可以在本地或上传到 支持HTML的环境使用
ipchaxun_simple.html  #相比ipchaxun.html,删除掉了代码中的 “检测能否访问Google服务“的功能
'Authorization': 'Bearer S****' #这是API调用的秘钥,纯静态没任何意义,如果能看懂可以删除,或者移植到workers.js 上,添加个环境变量,可以提高安全性。
2、要替换的部分
  • 代码中的秘钥部分 ‘Authorization’: ‘Bearer S**** ,将红色部分key改成自己的,纯静态F12就能直接看到key,所以是否有key没啥意义,如果上传到cloudflare workers运行,可以设置一个变量,用来保存秘钥【如果docker安装时,未设置API_SECRET,这步可以忽略】;
  • 将代码中API地址也替换成自己的,如https://ipapi.****.net/ip
3、演示

分别为PC端和手机端

4、其它
原作者的贴子和项目,想了解更多可以去看看
https://linux.do/t/topic/257335
https://github.com/deanxv/go-geoip
一些其它已知问题,请见另一篇:0成本 搭建基于MaxMind-GeoIP库的IP查询API及网站