Google Analytics 是谷歌提供的数据统计服务,可以对目标网站进行访问数据统计和分析,并提供多种参数供网站拥有者使用。
网站配置GA的常见方式是在网络前端引用analysis.js脚本,从前端利用javascript进行统计,这种方案的缺点是:
1、客户端到GA的网络问题,analysis.js加载缓慢,向GA发送信息速度慢或者失败,各地网络情况不一导致失败等问题。
2、客户端屏蔽GA,比如一些插件adblock扩展自带的屏蔽列表,利用userscript进行屏蔽等方式,这些会导致统计存在偏差等问题
所以,我们将GA的统计工作从前端转到后端完成,就可以避免上述问题。也就是使用nginx做一个代理,将用户的请求操作替换成本机来请求的操作,这样就解决了网络不一的问题,速度慢或失败的问题,并且是不影响客户端的体验,统计的数据更加准确。
nginx配置
[root@sandy]# cd /usr/local/nginx/conf
conf/
├── vhost
│ ├── blog.e9china.net.conf
├── nginx.conf
看下目录结构,这里我们启用了Include。
在主配置文件nginx.conf中http{ }段里加上map { }
map $http_user_agent $limit_bots {
default 0;
~*(google|bing|yandex|msnbot) 1;
~*(AltaVista|Slurp|BlackWidow|Bot|ChinaClaw|Custo|DISCo|Download|Demon|eCatch|EirGrabber|EmailSiphon|Emailwolf|SuperHTTP|Surfbot|WebWhacker) 1;
~*(Express|WebPictures|ExtractorPro|EyeNetIE|FlashGet|GetRight|GetWeb!|Go!Zilla|Go-Ahead-Got-It|GrabNet|Grafula|HMView|Go!Zilla|Go-Ahead-Got-It) 1;
~*(rafula|HMView|HTTrack|Stripper|Sucker|Indy|InterGET|Ninja|JetCar|Spider|larbin|LeechFTP|Downloader|tool|Navroad|NearSite|NetAnts|tAkeOut|WWWOFFLE) 1;
~*(GrabNet|NetSpider|Vampire|NetZIP|Octopus|Offline|PageGrabber|Foto|pavuk|pcBrowser|RealDownload|ReGet|SiteSnagger|SmartDownload|SuperBot|WebSpider) 1;
~*(Teleport|VoidEYE|Collector|WebAuto|WebCopier|WebFetch|WebGo|WebLeacher|WebReaper|WebSauger|eXtractor|Quester|WebStripper|WebZIP|Wget|Widow|Zeus) 1;
~*(Twengabot|htmlparser|libwww|Python|perl|urllib|scan|Curl|email|PycURL|Pyth|PyQ|WebCollector|WebCopy|webcraw) 1;
~*(qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!.*Slurp|Yahoo!.*Slurp.*China|YoudaoBot|Sosospider|Sogou.*spider|Sogou.*web.*spider|MSNBot|ia_archiver|Tomato.*Bot|YiSou.*Spider) 1;
}
在子配置文件blog.e9china.net.conf里加上:
#启用userid会通过cookie给每一个访客一个固定的userid
userid on;
#因为GA内的userid叫cid所以这里命名为cid
userid_name cid;
#相当于cookie的域,设置裸域则同一个用户访问二级域名会识别成一个用户,反之识别为不同的用户
userid_domain blog.e9china.net;
#相当于cookie的path,设置为根目录就好
userid_path /home/wwwroot/blog.e9china.net;
#相当于cookie的过期时间,设置为最大,尽可能的长期追踪一个用户的访问记录
userid_expires max;
rewrite ^(.*) https://$host$1 permanent;
location @tracker {
#只允许内部访问
internal;
resolver 8.8.8.8 8.8.4.4 ipv6=off;
proxy_method GET;
#$uid_set$uid_got当用户是第一次访问时,$uid_set为cid=xxxxx,$uid_god为空,以后访问时两者相反,所以$uid_set$uid_got实际上会得到cid=xxxxx
proxy_pass https://www.google-analytics.com/collect?v=1&tid=UA-xxxxxxxx-1&$uid_set$uid_got&t=pageview&je=0&uip=$remote_addr&dl=$http_referer&$args&z=$msec;
# proxy_pass https://127.0.0.1:9999/collect?v=1&tid=UA-xxxxxxxx-1&$uid_set$uid_got&t=pageview&je=0&uip=$remote_addr&dl=$http_referer&$args&z=$msec;
proxy_set_header User-Agent $http_user_agent;
proxy_pass_request_headers off;
#不向GA提交原请求的body
proxy_pass_request_body off;
}
location / {
try_files $uri $uri/ =404;
#当匹配到此location时,这里会异步调用@tracker
post_action @tracker;
}
配置无误检查正确后重启下服务即可。
另外我们还要修改我们的前端代码,以wordpress为例,这里我是在header.php中添加的GA代码:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-137679245-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137679245-1');
</script>
至此,使用nginx代理GA就已完成。
评论
发表评论