前言
umami部署好后只识别访问者的国家,问了豆包得出了以下方法
问题根源
你现在只能看到国家、看不到省市,核心原因是:Umami 拿到的访客 IP 是 EdgeOne 的边缘节点 IP,不是用户的真实 IP。用 CDN 节点 IP 去查询地理位置,只能解析到国家层级,无法得到准确的省市信息。
下面提供两套可直接操作的方案,按难度从低到高排列:
方案一:开启真实 IP 回源(小白首选,操作最少)
做完这两步,Umami 就能拿到用户真实 IP,再用自带的 MaxMind GeoLite2 城市数据库自动解析出省市和城市。
第 1 步:EdgeOne 开启真实客户端 IP 头部
登录腾讯云 EdgeOne 控制台,进入你的站点
swlt.work左侧菜单点击「站点加速」→「网络优化」
找到「真实客户端 IP 头部」卡片,点击开关开启
头部名称保持默认
EO-Connecting-IP即可,点击保存。
第 2 步:给 Umami 添加环境变量
如果你是 Docker(docker-compose)部署,编辑你的 docker-compose.yml,在 umami 服务的 environment 中添加一行:
environment:
# 保留你原有的 DATABASE_URL、APP_SECRET 等配置
CLIENT_IP_HEADER: EO-Connecting-IP保存后执行 docker compose up -d 重启容器生效。
如果是宝塔面板部署,在 Docker 管理或网站配置中添加该环境变量即可。
方案二:EdgeOne 直接传递省市信息(更精准,进阶方案)
EdgeOne 本身就能解析访客 IP 的省 / 市信息,我们可以直接把这些数据通过请求头传给 Umami。Umami 原生兼容 Cloudflare 格式的地理头,我们只需把 EdgeOne 的地理信息包装成对应名称的头即可,定位精度和 EdgeOne 完全一致,国内省市更准。
前置要求
先完成「方案一」的所有步骤(保证真实 IP 正常传递)。
第 1 步:在规则引擎中添加自定义回源头
EdgeOne 控制台 → 站点加速 → 规则引擎
点击「创建规则」→「新增空白规则」
匹配条件:选择
HOST,等于你的umami 域名添加操作:选择「修改 HTTP 回源请求头」,操作类型选「增加」
依次添加以下 3 个请求头:
点击「保存并发布」,等待 1-2 分钟生效。
如果设置了反代还需要进行以下步骤
第 1 步:打开站点配置文件
登录宝塔面板,左侧点击「网站」
找到对应
umami的站点,点击右侧「设置」在弹出的窗口左侧,点击「配置文件」,进入 Nginx 配置编辑页
第 2 步:添加头转发规则
在配置文件中找到 location / 对应的代码块,在 proxy_pass 这一行的下方,粘贴以下代码:
# 转发 EdgeOne 传递的真实客户端IP
proxy_set_header EO-Connecting-IP $http_eo_connecting_ip;
# 转发 EdgeOne 地理信息头(国家/省份/城市)
proxy_set_header CF-IPCountry $http_cf_ipcountry;
proxy_set_header CF-Region-Code $http_cf_region_code;
proxy_set_header CF-IPCity $http_cf_ipcity;
# 补充标准转发头,避免IP识别异常
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $http_eo_connecting_ip;注意:代码必须放在
location / { ... }的大括号内部,和proxy_pass同级。
第 3 步:保存生效
点击配置文件右上角「保存」,宝塔会自动重载 Nginx 配置,提示保存成功即可。