通过 Nginx 使用 Google Analytics 服务

背景

一直以来,我的博客都是使用 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 脚本的浏览器的用户,而现在的话能统计的更多。

包括通过 curlhttpie 请求的,都能正常统计进去。

唯一的一点缺陷就是,我的网站使用了一些第三方的监控,而这个也会被统计进去。不过这个可以通过谷歌统计后台的过滤器给过滤掉,这样的话就会更加精确了。

参考资料

N​g­i​n​x 内配置 G​o​o​g​l​e A​n­a­l​y​t­i​c​s 指南