跳至主要内容

nginx代理Google An­a­lyt­ics

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

网站配置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就已完成。

评论

此博客中的热门博文

阿里云通过Nginx中转Linode/digitalocean/AWS的V2ray协议,实现负载均衡

开篇文的废话.原因是Sandy做站服务器太多了,发现利用率不高,皮又痒了又想折腾了.v2ray是利器但是给人的感觉就是只能用一台服务器,官方也说不支持负载均衡,不会A服务器挂机,自动跳转到B服务器.这里就有点折磨人了.每个服务器挂了都要自己去改配置文件. 我们访问国外的服务器,如果没CN2的线路是非常慢的,起码不快!哈哈~现在VPS都便宜起码人手一个人有5台以上吧?这样的话我们就可以开整. 开整条件:国内VPS或者阿里云有CN2线路的机器最好是100MB-200MB的带宽的.保证你爽歪歪.但是Sandy在阿里云HK30MB下也测试了也可以达到30000KB以上,羡慕吧~我们可以开始了! 老规则工具先出: 没被gwf和谐的服务器1台(下文统称:主服务器) 国外服务器2台以上(下文统称:从服务器) nginx 1.9.5版本以上(推荐:lnmp1.4) v2ray croe 第一步: 在 主服务器 安装lnmp1.4,这里就不细说教程了.直接去 官方 看教程 安装完毕以后我们来升级Nginx让他支持stream模块 cd lnmp1.4 vi lnmp.conf 在Nginx_Modules_Options=‘’里面加入--with-stream Nginx_Modules_Options='--with-stream’ 然后执行升级命令 ./upgrade.sh nginx  第二步 修改nginx.conf文件 cd /usr/local/nginx/conf/nginx.conf 在 events { use epoll; worker_connections 51200; multi_accept on; } 下面加入 stream{ server{ listen 0.0.0.0:8080; proxy_pass v2ray_backend; proxy_timeout 10m; proxy_connect_timeout 5000ms; } upstream v2ray_backend{ server ...

Mac下Aria2安装及其配置并设置开机启动

1.安装Homebrew 注:(如已安装,请忽略) 打开终端键入以下命令,等待完成 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.安装最新版本aria2并配置 1.终端下输入以下命令 ➜ ~ brew install aria2 2.等待安装完成后,下载附件 Aria2相关配置下载地址 aria2 config 3.建立aria2文件夹 cd ~ // 创建aria2文件夹 mkdir ~/.aria2 4.打开刚才创建好的aria2文件夹 ➜ ~ open ~/.aria2 5.解压下载好的附件,将 下列文件 复制到aria2文件夹内 aria2.conf aria2.log aria2.session com.aria2c.plist com.google.Chrome.mobileconfig 6.将下载文件夹内的 aria2c 文件复制到 /usr/local/Cellar/aria2/1.33.1/bin 下 操作方式,终端输入命令 cd /usr/local/Cellar/aria2/1.33.1/bin 将该文件夹里的 aria2c 文件重命名为 aria2c.bak,再将下载文件夹内的 aria2c 复制进去 注: 1.理由是官方的 aria2c 版本最多支持16线程,sarkrui改好的aria2c版本支持128线程 2.文中所说的1.33.1是我当前从brew上下载下来的版本,实际以你brew下载下来的版本为准,如果和我版本不一致,请修改相关的1.33.1这个路径 7.右键使用文本编辑或sublime打开 aria2.conf 找到如下语句,将hsuyelin(本人电脑用户名)修改为你电脑的用户,修改完成 command+s 保存退出 #文件保存路径, 默认为当前启动位置 dir=/Users/hsuyelin/Downloads # 日志保存路径 log=/Users/hsuyelin/.aria2/aria2.log # 从会话文件中读取下载任务 input-file=/Users/hsu...

Android 用户必备良药「黑域」,专治「全家桶」唤醒烦恼

显然,这不是广告! 这么好的应用,不分享给尾巴们简直说不过去,于是我决定自己动手写一篇关于「黑域」的简单介绍。 那么在聊「黑域」之前,先说一下国产 Android 应用的尴尬之处。注意,以下信息不一定准确。 众所周知,谷歌服务在国内是被你懂的 XX 所干扰,而 Android 系统的诸多服务没有了这些支持的话就会变成残缺状态。比如推送服务,Android 是和 iOS 一样拥有系统层级的推送服务,这项服务叫做 Google Cloud Messaging,现在新名称是 Firebase Cloud Messaging 。 由于这项服务被干扰,国产 Android 应用如果想要推送消息给用户,通常都会选择「小米推送」、「极光推送」、「个推」等第三方推送服务,为了确保服务的可靠性,他们就得让应用处于运行状态,而非彻底从后台任务中清除。 然后,问题就来了。 国内各大手机厂商们为了确保手机运行的流畅性和稳定性,会选择让系统杀掉那些常驻在后台的应用进程。由于各家手机厂商的系统功能完全不同,杀进程的方法也就都不一样。举个例子,采用「小米推送」服务的 Android 应用在 MIUI 下可以获得最高的消息送达率,即使应用被切到后台也没关系,正常情况下它依然能够收到通知。但如果是在 Flyme OS 的话,当这款应用切到了后台那么很可能它的进程就会被杀掉,导致消息无法正常送达。   ▲ 让人又爱又恨的某些国产应用 为此,这些 Android 应用不得不采取一些措施以确保自家应用的推送通知能够送达用户,于是……噔噔噔!掌声有请「全家桶」登场!随后就…… 一个推送通知直接把多个应用同时唤醒,后台电量哗啦啦下降,机身发热,滑动卡顿……天呐,这简直就是灾难。如果手机厂商不针对这种状况做处理,最终结果可想而知。 当然,你可别以为这些国产应用只是为了推送才要常驻后台,比如自动下载安装包什么的,因为 Google Play 商店没有入华,应用也无法实现自动更新。为了确保用户使用最新版本的应用,常驻后台自动下载安装包什么的 ,呵呵呵。 这就是没有谷歌服务的 Android 在中国大环境下的现状,它显得非常具有中国特色,但本质上它是因为先天性缺陷才造成了今天的局面,是的,这一缺陷不是你光靠科学上网就能改变得了。 说到这里,某些非 Android 用户估计又要觉...