ip2region 离线IP定位接入与部署说明
一、功能说明
项目通过 ip2region_v4.xdb 本地离线库查询 IPv4 归属地,用于登录日志地址记录、商城用户省市更新等场景。
核心工具类:
joolun-common/joolun-common-core/src/main/java/com/joolun/cloud/common/core/util/IpUtils.java
依赖模块:
joolun-common/joolun-common-core
依赖坐标:
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
</dependency>
如果离线库不存在、IP 格式异常或查询失败,系统会返回空地址,不抛出异常,不影响登录、注册、用户资料更新等主流程。
二、离线库文件
需要准备文件:
ip2region_v4.xdb
下载地址:
https://raw.githubusercontent.com/lionsoul2014/ip2region/master/data/ip2region_v4.xdb
IPv6 数据文件:
https://raw.githubusercontent.com/lionsoul2014/ip2region/master/data/ip2region_v6.xdb
本项目统一使用官方当前 IPv4 数据文件名 ip2region_v4.xdb,不需要重命名。
官方目录:
https://github.com/lionsoul2014/ip2region/tree/master/data
建议从 ip2region 官方仓库或可信发布渠道获取,并在上线前确认文件来源可靠。
生产环境推荐路径:
/data/ip2region/ip2region_v4.xdb
Windows 环境示例路径:
C:\data\ip2region\ip2region_v4.xdb
三、配置方式
1. Nacos 或 application.yml
推荐使用该方式:
joolun:
ip2region:
xdb-path: /data/ip2region/ip2region_v4.xdb
2. 环境变量
适合 Docker、K8s 部署:
IP2REGION_XDB_PATH=/data/ip2region/ip2region_v4.xdb
3. JVM 参数
适合 jar 方式部署:
java -Djoolun.ip2region.xdb-path=/data/ip2region/ip2region_v4.xdb -jar joolun-auth.jar
兼容参数:
java -Dip2region.xdb.path=/data/ip2region/ip2region_v4.xdb -jar joolun-auth.jar
4. classpath 内置
如果未配置外部路径,系统会尝试从以下位置读取:
classpath:/ip2region/ip2region_v4.xdb
classpath:/ip2region_v4.xdb
源码目录可放在:
joolun-common/joolun-common-core/src/main/resources/ip2region/ip2region_v4.xdb
该方式适合测试环境或单机部署,生产环境建议使用外部挂载路径。
五、jar 部署
Linux 目录示例:
/data/app/joolun-auth.jar
/data/ip2region/ip2region_v4.xdb
启动命令:
java -Djoolun.ip2region.xdb-path=/data/ip2region/ip2region_v4.xdb -jar /data/app/joolun-auth.jar
Windows 示例:
$env:IP2REGION_XDB_PATH="C:\data\ip2region\ip2region_v4.xdb"
java -jar C:\data\app\joolun-auth.jar
六、验证方法
1. 启动日志
首次调用 IP 查询时,应看到类似日志:
加载 ip2region 离线IP库:/data/ip2region/ip2region_v4.xdb
如果文件不存在,会看到类似日志:
未找到 ip2region 离线IP库,请配置 joolun.ip2region.xdb-path 或将 ip2region_v4.xdb 放入 classpath:/ip2region/
该日志只会打印一次,避免持续刷屏。
2. 登录日志
登录后台后,检查登录日志地址字段是否有值。
涉及服务:
joolun-auth
3. 小程序用户省市
小程序用户登录或触发省市更新后,检查用户表中的省份和城市字段是否有值。
涉及服务:
joolun-mall-api
七、故障排查
1. 提示找不到 ip2region_v4.xdb
检查配置路径是否正确:
ls -l /data/ip2region/ip2region_v4.xdb
K8s 中检查 Pod 内路径:
kubectl exec -it <pod-name> -- ls -l /data/ip2region/ip2region_v4.xdb
2. 配置了路径但仍无效
检查环境变量:
kubectl exec -it <pod-name> -- printenv IP2REGION_XDB_PATH
检查 Nacos 或 YAML 配置:
joolun:
ip2region:
xdb-path: /data/ip2region/ip2region_v4.xdb
3. 地址为空但没有报错
常见原因:
ip2region_v4.xdb不存在。- IP 是内网地址,例如
127.0.0.1、10.x.x.x、172.16.x.x、192.168.x.x。 - 网关或代理没有正确透传真实客户端 IP。
- IP 库版本较旧,查询不到最新地址。
4. K8s 中拿到的是 Pod IP 或网关 IP
需要检查:
- Ingress 是否透传
X-Forwarded-For。 - 网关是否保留真实客户端 IP。
- 应用读取 IP 的工具是否从正确请求头取值。
- 负载均衡器是否开启真实 IP 透传。
八、运维建议
ip2region_v4.xdb建议按季度或半年更新一次。- 生产环境建议使用外部挂载路径,避免每次更新都重新发版。
- 不要把 IP 解析作为核心业务强依赖,失败时应允许业务继续执行。
- 如果业务需要高精度定位,应改用用户授权地理位置或地图服务。
九、关闭定位
如需临时关闭 IP 定位,不配置 ip2region_v4.xdb 文件即可。系统会自动降级为空地址,不影响主流程。