解决 Umami 被 AdBlock 屏蔽问题

解决 Umami 被 AdBlock 屏蔽问题

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

Umami 统计脚本常被 AdBlock 屏蔽。作者通过 Cloudflare Workers 反向代理 Umami,缓存脚本并转发数据上报,从而绕过屏蔽规则。配置自定义域名后,将脚本注入网站,并设置脚本地址、上报地址和站点 ID,即可正常统计。

🔎

延伸解读

AdBlock 屏蔽机制与反代思路

AdBlock 通过规则 ||umami.is^$3p 屏蔽 Umami 的脚本地址和数据上报地址,导致统计失效。文章提出用 Cloudflare Workers 反向代理 Umami,将脚本请求和上报请求转发到自定义域名,从而绕过屏蔽规则。这种方法不修改 Umami 本身,而是通过中间层隐藏真实请求地址,适合使用官方服务的用户。

自建服务的替代方案

如果 Umami 是自建服务,文章指出无需使用反向代理,可以通过环境变量 TRACKER_SCRIPT_NAME 和 COLLECT_API_ENDPOINT 自定义脚本地址和数据上报地址。这为自建用户提供了更直接的规避屏蔽方式,避免了额外维护 Worker 的成本。

Worker 代码的关键处理

提供的 Worker 代码对 .js 请求使用缓存,减少重复回源;对其他请求则删除 cookie 并添加 x-client-ip 头,传递客户端真实 IP。这些处理既提升了脚本加载效率,也确保 Umami 能正确记录访问来源。代码中 UMAMI_HOST 需根据实际服务地址修改。

前端注入与注意事项

将脚本注入网站时,需设置 src 为反代后的脚本地址,data-host-url 为反代后的上报地址,data-website-id 为正确的站点 ID。文章强调站点 ID 不能写错,否则数据无法上报。同时,脚本地址中的路径可以任意伪装,Worker 已适配。

❓

Q&A

Umami 统计脚本为什么会被 AdBlock 屏蔽?

因为 AdBlock 的屏蔽规则中包含 ||umami.is^$3p,该规则会同时屏蔽 Umami 的脚本地址和数据上报地址,导致统计失效。

如何用 Cloudflare Workers 反向代理 Umami 来绕过 AdBlock?

在 Cloudflare Workers 创建一个 Worker,贴入提供的 JS 代码。如果使用官方服务,无需修改代码;如果是三方服务,需将 UMAMI_HOST 改为服务地址;如果是自建服务,可通过 TRACKER_SCRIPT_NAME 和 COLLECT_API_ENDPOINT 环境变量自定义脚本地址和数据上报地址,无需反代。

反向代理 Umami 的 Worker 代码中,UMAMI_HOST 变量应该怎么设置?

如果使用 Umami 官方服务,UMAMI_HOST 保持默认的 'https://eu.umami.is' 即可;如果使用三方服务,需要将 UMAMI_HOST 修改为对应的服务地址。

如何将 Umami 统计脚本注入到网站中?

在网站项目中添加 script 标签,设置 src 为脚本地址(如 https://ums.miantiao.me/mt-demo.js),data-host-url 为数据上报地址(如 https://ums.miantiao.me),data-website-id 为站点 ID。注意站点 ID 不能写错,否则无法上报数据。

自建 Umami 服务也需要用 Cloudflare Workers 反代吗?

不需要。如果是自建服务,可以使用 TRACKER_SCRIPT_NAME 和 COLLECT_API_ENDPOINT 环境变量来定义脚本地址和数据上报地址,无需进行反向代理。

配置好 Worker 后,如何测试脚本地址是否正常工作?

配置好 Worker 并绑定域名后,直接访问脚本地址(如 https://ums.miantiao.me/mt-demo.js),如果能正常返回脚本内容,说明配置成功。其中 mt-demo 可以替换为任意伪装地址,Worker 代码已适配。

🏷️

标签

➡️

继续阅读