OpenResty代理CNZZ实现内网访问统计,openrestycnzz


用户在没有进行上网认证之前,只能访问我们的某一台服务器,这台服务有web网页,需要用CNZZ来统计网页的浏览量等。 CNZZ并没有在网关的白名单中,所以需要通过代理完成用户浏览器到cnzz服务器的这段通信。

参考google的代理统计方式, 感觉 Openresty代理应该可行,然后就行了一些实验。

cnzz 流程调试

<script src="http://s11.cnzz.com/z_stat.php?id=1260381139&web_id=1260381139" language="JavaScript"></script>

上面是cnzz的网站统计代码,一般的情况下是嵌入到自己的网页中就可以进行统计了。现在可以访问互联网的环境下,看看cnzz统计代码怎样的方式来和它服务端进行通信。

使用浏览器的F12或者是开发者工具就足够了, 当一个网页载入之后,cnzz的这段统计代码第一次会出发5个请求

1 http://s11.cnzz.com/z_stat.php?id=1260381139&web_id=1260381139

2 http://c.cnzz.com/core.php?web_id=1260381139&t=z

3 http://z13.cnzz.com/stat.htm?id=1260381139&r=&lg=zh-cn&ntime=none&cnzz_eid=719229130-1478700953-&showp=1280x800&t=%E5%B0%94%E9%9B%85%E4%BA%91%E5%B9%B3%E5%8F%B0&h=1&rnd=924791119

4 http://cnzz.mmstat.com/9.gif?abc=1&rnd=403768672
5 http://pcookie.cnzz.com/app.gif?&cna=JeipEH6FtAcCAXJuASbnOiHR

4,5两个请求没有多关注,看到网络说有些浏览器直接报有毒。。
前3个请求是这样的 1是页面中的js,通过1得到了2和3的地址,访问2,3,3是真正的统计数据请求。

要做的就是代理1,2,3请求,并且把1请求的response中2,3域名替换成本站的域名

操作

统计代码修改

<script src="/z_stat.php?id=1260381139&web_id=1260381139" language="JavaScript"></script>

如果想要cnzz统计不显示图标或者是文字,可以用一个div设置隐藏来实现。 <div >xxx</div>

OpenResty配置,server块中

resolver 114.114.114.114;
    proxy_set_header X-real-ip $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    set $z_stat_host "s4.cnzz.com";
    set $stat_host "z11.cnzz.com";
    set $stat_host_bak "z13.cnzz.com";
    set $core_host "c.cnzz.com";


    location = /z_stat.php {
        proxy_set_header Host $z_stat_host;
        proxy_pass http://$z_stat_host;
        body_filter_by_lua '
            ngx.arg[1] = ngx.re.gsub(ngx.arg[1], ngx.var.core_host, ngx.var.host);
            ngx.arg[1] = ngx.re.gsub(ngx.arg[1], ngx.var.stat_host, ngx.var.host);
            ngx.arg[1] = ngx.re.gsub(ngx.arg[1], ngx.var.stat_host_bak, ngx.var.host);
        ';
    }

    location = /core.php {
        proxy_set_header Host $core_host;
        proxy_pass http://$core_host;
    }

    location = /stat.htm {
        proxy_set_header Host $stat_host ;
        proxy_pass http://$stat_host;
    }

第三个请求的域名不是固定的,所以上面的做法可能会丢失一些统计,后面有时间会考虑下,或者使用自己的统计方案。

后来抓包统计了下,下面的结论: CNZZ给出的统计js,一般都是 s开头的域名,s11.cnzz.coms4.cnzz.com等。c.cnzz.com 这个域名貌似不怎么变化,统计请求的域名多是 z11.cnzz.com 或者 z13.cnzz.com,一般都z开头,其它的域名较少。当然这只是根据一些样本的猜测。。对于cnzz的负载均衡策略不好预测

相关内容

    暂无相关文章