Openresty + GeoIP2实现IP归属地查询_zhannk的博客-CSDN博客


本站和网页 https://blog.csdn.net/zhannk/article/details/84871043 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Openresty + GeoIP2实现IP归属地查询_zhannk的博客-CSDN博客
Openresty + GeoIP2实现IP归属地查询
zhannk
于 2018-12-07 17:06:09 发布
4142
收藏
分类专栏:
通用
服务器
其他
文章标签:
nginx
openresty
lua
geoip
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhannk/article/details/84871043
版权
通用
同时被 3 个专栏收录
13 篇文章
0 订阅
订阅专栏
服务器
6 篇文章
0 订阅
订阅专栏
其他
1 篇文章
0 订阅
订阅专栏
为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面。很多情况下系统需要根据用户访问的IP信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容。本方案在CentOS7.x环境下基于高性能的Openresty1.13.6.2来实现。
方案介绍
要通过IP地址确认归属地,通常可以使用一些在线查询服务来实现,比如https://blog.csdn.net/XinTeng2012/article/details/34418117?utm_source=blogxgwz8 介绍的常见提供查询服务。 但使用在线服务查询潜在存在性能问题,同时通过lua来访问外部服务增加额外的代码量。 通过本地的GeoIP库来实现查询是个比较好的方案,GeoIP提供免费和收费服务(https://www.maxmind.com/en/home),大多数情况下使用定期更新的GeoIP数据库能满足基本需求。
因此,可以在openresty中通过lua库本地GeopIP数据库的方式来实现快速位置查询和用户访问界面重定向。
环境准备
一:OpenResty安装
OpenResty方便地将Nginx和常用的各类lua库打包发布,可以方便地参考 https://openresty.org/en/installation.html 文档从源码编译安装。主要安装步骤说明如下:
tar -xvf openresty-VERSION.tar.gz
cd openresty-VERSION/
./configure -j2 --prefix=/usr/local/openresty
make -j2
sudo make install
# better also add the following line to your ~/.bashrc or ~/.bash_profile file.
export PATH=/usr/local/openresty/bin:$PATH
这里的VERSION 是OpenResty具体版本号,目前为 1.13.6.2。编译安装后可以通过如下命令查看版本信息:
/usr/local/openresty/bin/openresty -V
nginx version: openresty/1.13.6.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)?
built with OpenSSL 1.0.2k-fips ?26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.13 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.5 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-stream --with-stream_ssl_module --with-http_ssl_module
openresty包含了自身的包维护工具opm,该工具采用perl实现依赖MD5,需要执行yum install  -y perl-Digest-MD5 安装。
二:GeoIP2安装
从https://dev.maxmind.com/geoip/geoip2/geolite2/ 下载MaxMind格式的GeoIP2数据库保存到本地服务器。比如将数据库文件GeoLite2-City.mmdb保存到/usr/local/openresty目录下。
GeoIP2 lua库安装,GeoIP2 lua库位于https://github.com/anjia0532/lua-resty-maxminddb ,可以通过如下命令方便安装:
/usr/local/openresty/bin/opm get anjia0532/lua-resty-maxminddb
GeoIP2 lua库依赖动态库安装,lua库依赖libmaxminddb实现对mmdb的高效访问。需要编译该库并添加到openresty访问环境。可以从https://github.com/maxmind/libmaxminddb/releases下载相应源码包到本地编译部署。基本编译步骤如下:
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig
默认情况下上述操作会将libmaxminddb.so部署到/usr/local/lib目录下,为了让openresty访问,可以拷贝到openresty目录下,或通过如下步骤更新ldconfig。
$ sudo sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf"
$ ldconfig
三:配置openresty nginx环境。
1,配置openresty nginx加载相应的lua库和动态库,需要在http段添加如下指令,其中的;;表示默认库路径:
        lua_package_path  "/usr/local/openresty/lualib/?.lua;;";         lua_package_cpath  "/usr/local/openresty/lualib/?.so;;";
2,指定lua处理请求的方式。 为了简易直观,如下示例的nginx.conf配置指定 /lua开始的url请求通过conf/lua/test.lua脚本来处理,这里没有做其他复杂的请求和变量处理工作。 现网环境下可能需要考虑更好的模块化配置管理方式,lua_code_cache off;参数只为测试使用,生产环境需设为on;
http {
lua_package_path "/usr/local/openresty/lualib/?.lua;;";
lua_package_cpath "/usr/local/openresty/lualib/?.so;;";
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
location /lua {
default_type "text/html";
charset utf-8;
lua_code_cache off;
content_by_lua_file conf/lua/test.lua;
四:编写访问mmdb的lua脚本
我们想通过传入IP地址的方式来查看归属地城市,比如,http://192.168.137.70/lua?ip=111.47.224.182&node=city。 可以如下方式编写按照上面设置的conf/lua/test.lua。
ngx.say("<br>IP location query result:<hr><br>")
local cjson=require 'cjson'
local geo=require 'resty.maxminddb'
local arg_ip=ngx.var.arg_ip
local arg_node=ngx.var.arg_node
ngx.say("IP:",arg_ip,", node:",arg_node,"<br>")
if not geo.initted() then
geo.init("/usr/local/openresty/GeoLite2-City.mmdb")
end
local res,err=geo.lookup(arg_ip or ngx.var.remote_addr)
if not res then
ngx.say("Please check the ip address you provided: <div style='color:red'>",arg_ip,"</div>")
ngx.log(ngx.ERR,' failed to lookup by ip , reason :',err)
else
ngx.say("Result:",cjson.encode(res))
if arg_node then
ngx.say("node name:",ngx.var.arg_node, " , value:",cjson.encode(res[ngx.var.arg_node] or {}))
end
end
五:访问验证
curl -k -L "http://192.168.137.70/lua?ip=111.47.224.182&node=country"
<br>IP location query result:<hr><br>
IP:111.47.224.182, Node:country<br>
Result:{"city":{"geoname_id":1791247,"names":{"en":"Wuhan","ru":"Ухань","fr":"Wuhan","pt-BR":"Wuhan","zh-CN":"武汉","es":"Wuhan","de":"Wuhan","ja":"武漢市"}},"subdivisions":[{"geoname_id":1806949,"names":{"en":"Hubei","ru":"Хубэй","fr":"Province de Hubei","pt-BR":"Hubei","zh-CN":"湖北省","es":"Hubei","de":"Hubei","ja":"湖北省"},"iso_code":"HB"}],"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":114.2734,"accuracy_radius":200,"latitude":30.5801},"continent":{"geoname_id":6255147,"names":{"en":"Asia","ru":"Азия","fr":"Asie","pt-BR":"Ásia","zh-CN":"亚洲","es":"Asia","de":"Asien","ja":"アジア"},"code":"AS"}}
<br>Node name:country<br>Value:{"geoname_id":1814991,"names":{"en":"China","ru":"Китай","fr":"Chine","pt-BR":"China","zh-CN":"中国","es":"China","de":"China","ja":"中国"},"iso_code":"CN"}
"武汉"
zhannk
关注
关注
点赞
收藏
打赏
评论
Openresty + GeoIP2实现IP归属地查询
为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面。很多情况下系统需要根据用户访问的IP信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容。本方案在CentOS7.x环境下基于高性能的Openresty1.13.6.2来实现。方案介绍要通过IP地址确认归属地,通常可以使用一些在线查询服务来实现,比如https://blog.csdn.net/XinTen...
复制链接
扫一扫
专栏目录
openresty:Openresty、GeoIP 和 Luarocks 的 Docker 构建
06-07
OpenResty 容器的 Dockerfile
安装并配置了以下组件:
OpenResty
地理IP
路亚摇滚
Docker 索引上的可信构建可以在这里找到:
GeoIP地址库,用于查找对应IP地址对应的国家,城市
08-25
GeoIP地址库,用于查找对应IP地址对应的国家,城市
参与评论
您还未登录,请先
登录
后发表或查看评论
Nginx安装配置(lua全模块、GEOIP、加入系统服务)---无坑安装
最新发布
u012417092的博客
10-13
764
在线安装是最简便的,如果只需基本的web和转发服务就别往下看,直接【yum install nginx】,少折腾,稳定才是王道。下载安装包安装便以自定义参数、加载模块,但缺少系统服务支持。比如用systemctl start(stop\status) nginx命令,还有最常配置命令:nginx -t、nginx -s *需要对应安装目录下才能运行。以下介绍nginx下载全模块安装并加入系统服务。
通过GeoIP获取ip所属地,并将国家转换为中文
09-10
本代码包实现了两个功能:
1.集成GeoIP,通过ip查询国家信息
2.将查询到的国家编码对应到中文名
Openresty + GeoIP2实现IP归属国家查询
yinjinshui的博客
07-13
749
为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面。很多情况下系统需要根据用户访问的IP信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容。本方案在CentOS7.x环境下基于高性能的Openresty1.13.6.2来实现。
方案介绍
要通过IP地址确认归属地,通常可以使用一些在线查询服务来实现,比如https://blog.csdn.net/XinTeng2012/article/details/34418117?utm_source=blogxgwz8 介绍的常见提
nginx根据客户端ip地理位置转发到不同服务器上(Geoip+nginx)
weixin_33938733的博客
11-05
4346
2019独角兽企业重金招聘Python工程师标准>>>
...
MacOS使用GeoIP2库查询ip详细信息
XJYSober的博客
07-21
404
GeoIP2
GeoIP2-ISP.mmdb
01-08
因为修改了下载链接导致无法使用了。
所以下载下来供大家使用。
分成了四个文件
GeoIP2-ISP.mmdb GeoLite2-City.mmdb
GeoLite2-ASN.mmdb GeoLite2-Country.mmdb
GeoIP2数据库——根据ip确定国家/地区
github_38271504的博客
12-18
2490
由于GEOIP官方的原免费GeoLite Legacy数据库(.dat)已于2019年1月开始不再提供更新和支持。
而网上的90%的教程还是老教程, 就想着和大家分享一下.
项目中原本使用的是纯真数据库, 但是老板说要换成geoIP2, 最后选择了免费的GeoLite2 City.mmdb
mmdb下载地址:https://www.maxmind.com/en/accounts/464237/geoip/downloads(需要注册一个账号, 登录后才能下载, 直接注册就好. 去官网下可以下...
Openresty + GeoIP2 实现 IP 归属地查询
Cecil
05-03
645
为了实现业务系统针对不同地区 IP 访问,展示包含不同地区信息的业务交互界面。很多情况下系统需要根据用户访问的 IP 信息,判断用户可能的访问区域,针对不同的区域提供个性化的服务内容。本方案在 CentOS7.x 环境下基于高性能的 Openresty1.13.6.2 来实现。
方案介绍
要通过 IP 地址确认归属地,通常可以使用一些在线查询服务来实现,比如https://blog.csdn.ne...
lua如何将用户ip转为地理位置信息
weixin_45732673的博客
11-02
419
有三种方法:
第1种:使用淘宝或者其他ip转换地址,可以转换,
准确,但是请求频率限制了。
第2种:使用lua读取本地文件ip库,这种需要使用二叉树算法读取文件,获取位置。
速度会有些慢,对服务器压力大,准确。
第3中: 使用第三方ip转换库
ip2region 的git地址
https://gitee.com/lionsoul/ip2region/
ip2region 这个库暂时不兼容nginx-lua版本的解析,但是可以单独使用lu
openresty luarocks 安装以及openssl 问题处理
weixin_34191845的博客
11-15
483
1. 安装方式
wget https://luarocks.github.io/luarocks/releases/luarocks-2.4.3.tar.gz
tar -xzvf luarocks-2.4.3.tar.gz
cd luarocks-2.4.3
./configure --prefix=/usr/local/openresty/luajit \
--wit...
Docker 部署 OpenResty
YKenan的博客
07-02
1019
Docker 部署 OpenResty1. 运行2. 安装 vim3. 访问
1. 运行
拉镜像
docker pull openresty/openresty
运行
docker run -d -it -p 6002:80 -v /home/docker/openresty/nginx:/etc/nginx/conf.d -v /home/docker/openresty/data:/data --name=openresty openresty/openresty
2. 安装 vim
安装
IP库GeoLite2-City.mmdb的使用
m0_50008952的博客
11-30
977
引入GeoLite2-City库的依赖。
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.12.0</version>
</dependency>
public void test01() throws Exception {
【第三方库】【GeoIP2】Python中geoip2的使用
weixin_42279212的博客
01-10
2142
GeoIP的使用介绍,查询指定IP的地址,以及其他附加信息
GeoIP2-ISP.mmdb.rar
02-07
IP转地理位置,开发或者elk使用。
IP信息解析和地理定位,以及免费GeoLite2-City.mmdb的使用教程
热门推荐
CrownP的博客
09-25
1万+
demo源代码:https://github.com/CrownP/geolite2_demo
一、需求
通过输入一个IP地址,解析并获取信息,比如国家、国家代码、省份、省份代码、城市、邮政编码、经纬度等等信息
例如,解析ip(128.101.101.101)的信息如下:
二、实现形式
使用在线第三方提供的api:
ip-api.com
ip.taotao.com
百度地...
GeoIP2-City.mmdb.gz
09-18
全球ip转换经纬度库
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
zhannk
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
18
原创
22万+
周排名
116万+
总排名
2万+
访问
等级
381
积分
粉丝
获赞
评论
11
收藏
私信
关注
热门文章
Openresty + GeoIP2实现IP归属地查询
4141
Redis Cluster集群failover
2778
linux lvm损坏导致开机emergency mode修复
2438
内网环境离线部署kubernetes,docker
2297
build hadoop2.0.3 alpha from source
1808
分类专栏
ABAP讨论(系统开发)
BASIS(系统管理)
ERP信息咨询
FI/CO(财务与管理会计)
HR
ACG
C/C
JAVA
2篇
JSP
Windows
其他
1篇
服务器
6篇
C/C
通用
13篇
ABAP讨论(系统开发
我的文档
FI/CO(财务与管理会
BASIS
数据库
2篇
mysql
1篇
was
db2
IDE
最新评论
linux lvm损坏导致开机emergency mode修复
qq_32500511:
-L是修复xfs文件系统的最后手段,慎重选择,它会清空日志,会丢失用户数据和文件
内网环境离线部署kubernetes,docker
ctotalk:
mark
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
理解GMP
linux vsftp服务搭建
linux lvm损坏导致开机emergency mode修复
2022年1篇
2021年1篇
2020年2篇
2019年3篇
2018年2篇
2017年1篇
2016年5篇
2014年2篇
2013年1篇
2009年1篇
2008年2篇
2007年1篇
目录
目录
分类专栏
ABAP讨论(系统开发)
BASIS(系统管理)
ERP信息咨询
FI/CO(财务与管理会计)
HR
ACG
C/C
JAVA
2篇
JSP
Windows
其他
1篇
服务器
6篇
C/C
通用
13篇
ABAP讨论(系统开发
我的文档
FI/CO(财务与管理会
BASIS
数据库
2篇
mysql
1篇
was
db2
IDE
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
zhannk
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值