背景
一直以来,我的博客都是使用 Google Analytics 来统计网站的访问人数。
之前为了提供加载速度,把 analytics.js
,然后调用本地的 js 文件,试图通过这样来加快网站的载入速度。但是这样做也有一定的局限性,万一谷歌方面更新了这个文件,我可能要等很久才发现我的缓存过期了。另一方面,用户浏览器上面可以装有一下拦截插件,会去拦截谷歌的统计收集。因此这两个方面都会影响到我们的用户统计。
直到昨天看到这篇文章,我才知道原来可以使用 Nginx 来调用 Google Analytics 的接口来统计用户的访问。
这样做的话,用户方面不再需要请求那个文件并与谷歌服务器进行交互,一方面提高了速度,另一方面减少了被用户浏览器拦截的可能,使得统计更加精确!
配置
将下面的代码进行想对应的修改之后填入到你的 Nginx 相应的配置文件的适当位置中
如果想知道详细的配置意义,请参考文末的参考资料。
userid on;
userid_name cid;
userid_domain [domain];
userid_path /;
userid_expires max;
location @tracker {
internal;
proxy_method GET;
proxy_pass https://ssl.google-analytics.com/collect?v=1&tid=[UA-XXXXXXXX-Y]&$uid_set$uid_got&t=pageview&dh=$host&dp=$uri&uip=$remote_addr&dr=$http_referer&z=$msec;
proxy_set_header User-Agent $http_user_agent;
proxy_pass_request_headers off;
proxy_pass_request_body off;
}
location / {
try_files $uri $uri/ =404;
post_action @tracker;
}
遵守 DNT (Do Not Track) 的写法 location / { try_files $uri $uri/ =404; if ($http_dnt != 1) {post_action @tracker;} }
配置中有两个需要更改的地方,一个是 [domain]
,另一个是 [UA-XXXXXXXX-Y]
。第一个填写你的域名,第二个填写你之前申请下来的 TID
修改完成后保存 reload
一下 Nginx
即可。
体验
当我将我的网站切换到这个方案之后,有几点感受
加快了网站速度
由于加载少了一个文件,也少了与谷歌服务的异步交互,所以网站的速度加快了,也减少了用户访问所消耗的流量。
统计更加精确
之前的话,统计的只是能正常加载 javascript
脚本的浏览器的用户,而现在的话能统计的更多。
包括通过 curl
、 httpie
请求的,都能正常统计进去。
唯一的一点缺陷就是,我的网站使用了一些第三方的监控,而这个也会被统计进去。不过这个可以通过谷歌统计后台的过滤器给过滤掉,这样的话就会更加精确了。