一、问题二、解决方案三、参考
openresty+lua+redis+geoIp过滤ip功能上线后,发现有些ip无法识别,导致ip被拦,无法业务接口,从而造成一部分用户流失,其中可能包含"大哥"。
以 ip :175.176.44.170 为例
经过分析后,初步猜想可能是以下几种原因导致:
对于ip库比较老的问题,其实java马甲开关服务上也有geoip库,它更老,至少是5个月之前的版本,而openresty上的geoIp库是前几天刚下载的,所以基本不会是这个问题,并且调用了java服务的ip检查,也能识别是菲律宾ip。
对于ipv6和ipv4协议问题,geoIp库都能识别。
所以大概率是lua脚本的问题。
基于openresty写了个简单脚本使用lua调用geoIp解析ip的功能,把解析结果打印出来:
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。
怎么办呢,兼容即可。
在lua脚本中调用geoIp解析ip模块兼容国家key:
然后重新加载nginx配置:
nginx -s reload
curl localhost:xxxx/ip_check?ip=175.176.44.170
所以问题基本解决。
https://dev.maxmind.com/geoip/whats-new-in-geoip2?lang=en
本文分享自 PersistentCoder 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!