精选的想法、故事和创意,全部汇集于此!

文章背景图

用腾讯云 EdgeOne 让 umami 识别访客城市

2026-08-13
1
-
- 分钟

umami 部署好之后,访问者数据只能看到国家,省市全没有。一开始我以为是自己没配好,问了豆包才知道根因——Umami 拿到的访客 IP 是 EdgeOne 的边缘节点 IP,不是用户的真实 IP。用 CDN 节点 IP 去查询地理位置,只能解析到国家层级,自然得不到准确的省市信息。

下面提供两套可直接操作的方案,按难度从低到高排列。

方案一:开启真实 IP 回源(小白首选,操作最少)

做完这两步,Umami 就能拿到用户真实 IP,再用自带的 MaxMind GeoLite2 城市数据库自动解析出省市和城市。

第 1 步:EdgeOne 开启真实客户端 IP 头部

  1. 登录腾讯云 EdgeOne 控制台,进入你的站点(我的是 swlt.work
  2. 左侧菜单点击「站点加速」→「网络优化」
  3. 找到「真实客户端 IP 头部」卡片,点击开关开启
  4. 头部名称保持默认 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 步:在规则引擎中添加自定义回源头

  1. EdgeOne 控制台 → 站点加速 → 规则引擎
  2. 点击「创建规则」→「新增空白规则」
  3. 匹配条件:选择 HOST,等于你的 umami 域名
  4. 添加操作:选择「修改 HTTP 回源请求头」,操作类型选「增加」
  5. 依次添加以下 3 个请求头:
头部名称 头部值 作用
CF-IPCountry ${http.request.ip.country} 国家代码
CF-Region-Code ${http.request.ip.region_code} 省份代码(如 CN-JX 江西)
CF-IPCity ${http.request.ip.city} 城市名称
  1. 点击「保存并发布」,等待 1-2 分钟生效。

如果设置了反代还需要进行以下步骤

如果你用宝塔反代,EdgeOne 传过来的头会被 Nginx 丢掉,还得手动转发一遍。

第 1 步:打开站点配置文件

  1. 登录宝塔面板,左侧点击「网站」
  2. 找到对应 umami 的站点,点击右侧「设置」
  3. 在弹出的窗口左侧,点击「配置文件」,进入 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 配置,提示保存成功即可。

感谢他们为本文做出的贡献

https://umami.is/docs

https://console.cloud.tencent.com/edgeone

https://cloud.tencent.com/document/product/1552

原创

用腾讯云 EdgeOne 让 umami 识别访客城市

本文链接: 用腾讯云 EdgeOne 让 umami 识别访客城市

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录