前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx代理Google An­a­lyt­ics

nginx代理Google An­a­lyt­ics

作者头像
dogfei
发布2020-07-31 12:06:22
1K0
发布2020-07-31 12:06:22
举报
文章被收录于专栏:devops探索devops探索

Google An­a­lyt­ics 是谷歌提供的数据统计服务,可以对目标网站进行访问数据统计和分析,并提供多种参数供网站拥有者使用。

网站配置GA的常见方式是在网络前端引用analysis.js脚本,从前端利用javascript进行统计,这种方案的缺点是:

1、客户端到GA的网络问题,analysis.js加载缓慢,向GA发送信息速度慢或者失败,各地网络情况不一导致失败等问题。

2、客户端屏蔽GA,比如一些插件adblock扩展自带的屏蔽列表,利用userscript进行屏蔽等方式,这些会导致统计存在偏差等问题

所以,我们将GA的统计工作从前端转到后端完成,就可以避免上述问题。也就是使用nginx做一个代理,将用户的请求操作替换成本机来请求的操作,这样就解决了网络不一的问题,速度慢或失败的问题,并且是不影响客户端的体验,统计的数据更加准确。

nginx配置

1 2 3 4 5 6

[root@blog_site nginx]# tree conf/ conf/ ├── conf.d │   ├── blog.conf ├── nginx.conf

看下目录结构,这里我们启用了Include。

在主配置文件http{ }段里加上map { }

1 2 3 4 5 6 7 8 9 10 11

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; }

在子配置文件里加上:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

#启用userid会通过cookie给每一个访客一个固定的userid userid on; #因为GA内的userid叫cid所以这里命名为cid userid_name cid; #相当于cookie的域,设置裸域则同一个用户访问二级域名会识别成一个用户,反之识别为不同的用户 userid_domain www.devilf.cc; #相当于cookie的path,设置为根目录就好 userid_path /data/wordpress; #相当于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代码:

1 2 3 4 5 6 7 8 9

<!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-1186214208-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-1186214208-1'); </script>

至此,使用nginx代理GA就已完成。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nginx配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档