使用 Workers 反代 Google Analytics 加速访问
之前写过一篇《使用 Nginx 反代 Google Analytics 加速访问》通过在 nginx 配置文件中设置替换规则,将脚本内的 /g/collect 网址替换为反代服务器的地址,从而实现数据的转发 。然而,随着 Google Analytics 脚本的更新以及内部变量的动态更新,其网址结构也可能发生变化。
因我将服务器全面迁移至本地环境,反带时需要先让 Google Analytics 经过本地路由搭建的代理进行访问。但代理的稳定性一直是一个难题,尤其是在网络环境复杂的情况下,代理经常会出现连接中断、延迟过高的问题,而且,代理的不稳定还会导致数据丢失,因为当代理连接中断时,正在上报的数据可能会被丢弃,从而影响数据的完整性。
使用 CloudFlare Workers 进行反代
通过 CloudFlare 的全球节点优势,能够将请求路由到离用户最近的节点进行处理,从而减少网络延迟。无论用户位于世界的哪个角落,都能够快速地访问 Google Analytics,获取准确的数据。而且,CloudFlare Workers 的响应速度非常快,能够在毫秒级的时间内处理请求,确保数据上报的及时性 。
JAVASCRIPT
- export default {
- async fetch(request, env, ctx) {
- var src = null;
- // 请求网址
- const url = new URL(request.url);
- // 请求路径
- const route = url.pathname;
- // 获取真实地址
- const location = request.headers.get('CF-Connecting-IP') || '';
- // 复制头
- const header = new Headers( request.headers );
- // 删除源站地址,避免校验异常
- header.delete('Host');
- // 核心脚本
- if ( route.startsWith('/analytics.js') )
- {
- src = 'https://www.googletagmanager.com/gtag/js' + url.search;
- }
- // 数据上报
- else if ( route.startsWith('/analytics/g/collect') )
- {
- src = 'https://www.google-analytics.com/g/collect' + url.search + '&_uip=' + location;
- }
- // 无效请求
- else
- {
- return new Response('Not found', { status: 404 });
- }
- // 发起请求
- return await fetch( src, {
- method: request.method,
- headers: header,
- body: request.body
- });
- }
- };

借助 CloudFlare Workers 将核心脚本 gtag.js 以及上报接口 /g/collect 先行进行反代,在由前端 Google Analytics 配合 transport_url 接口,达到原生反代及响应上报接口,无需担心服务器的维护和性能问题。而且,CloudFlare Workers 还提供了丰富的 API 和工具,方便我对反代进行监控和管理,确保其稳定运行。
前端 Google Analytics 引用及入口
JAVASCRIPT
- window.dataLayer = window.dataLayer || [];
- function gtag() { dataLayer.push( arguments ); };
- gtag('js', new Date() );
- gtag('config', 'G-XXXXXXXXXX', {
- transport_url: '//res.example.com/analytics/'
- });
如上所述,直接使用官方原生 transport_url 接口就能直接替换 /g/collect 为 Workers 所反代的地址,不会因 gtag.js 脚本更新及内部动态变更而导致替换网址失效。
注意事项
我的服务器全局使用 CloudFlare 做为隧道并使用了优选,使用 Workers 亦是与服务器同一个地址方便维护管理。但 Workers 本身有 100, 000 次/日请求的限制,访问量大的站点建议做好缓存,减少请求次数。
https://www.uevan.com/how-to-reverse-proxy-google-analytics-via-cloudflare-workers
maple's sky
CC BY-NC 4.0