前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >lua/geoIp有些ip无法识别解决方案

lua/geoIp有些ip无法识别解决方案

作者头像
叔牙
发布2023-02-26 10:36:08
1.3K0
发布2023-02-26 10:36:08
举报

内容目录

一、问题二、解决方案三、参考

一、问题

openresty+lua+redis+geoIp过滤ip功能上线后,发现有些ip无法识别,导致ip被拦,无法业务接口,从而造成一部分用户流失,其中可能包含"大哥"。

以 ip :175.176.44.170 为例

1.问题分析与猜想

经过分析后,初步猜想可能是以下几种原因导致:

  • ip库比较老,新ip无法识别
  • ipv4和ipv6问题,ipv6转ipv4后无法解析
  • lua脚本调用geoIp库解析有问题
2.问题定位与排除

对于ip库比较老的问题,其实java马甲开关服务上也有geoip库,它更老,至少是5个月之前的版本,而openresty上的geoIp库是前几天刚下载的,所以基本不会是这个问题,并且调用了java服务的ip检查,也能识别是菲律宾ip。

对于ipv6和ipv4协议问题,geoIp库都能识别。

所以大概率是lua脚本的问题。

基于openresty写了个简单脚本使用lua调用geoIp解析ip的功能,把解析结果打印出来:

代码语言:javascript
复制
curl localhost:xxxx/geoIp?ip=175.176.44.170

对比一下我们的lua脚本:

原来我们脚本中只处理了k=country的结果,而有些ip解析后k=registered_country。。。

难道把k改成兼容registered_country就结束了吗?

我们还是老老实实翻一下官方文档吧:

什么意思我看不懂,翻译一下大概意思是:

也就是说,如果通过geoIp解析ip所属国家,解析结果对应的国家片段,有可能是country、registered_country和represented_country。

怎么办呢,兼容即可。

二、解决方案

1.修改脚本

在lua脚本中调用geoIp解析ip模块兼容国家key:

然后重新加载nginx配置:

代码语言:javascript
复制
nginx -s reload
2.验证
代码语言:javascript
复制
curl localhost:xxxx/ip_check?ip=175.176.44.170

所以问题基本解决。

三、参考

https://dev.maxmind.com/geoip/whats-new-in-geoip2?lang=en

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容目录
  • 一、问题
    • 1.问题分析与猜想
      • 2.问题定位与排除
      • 二、解决方案
        • 1.修改脚本
          • 2.验证
          • 三、参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档