资讯专栏INFORMATION COLUMN

通过nginx统计网站的PV、UV、IP

biaoxiaoduan / 803人阅读

摘要:最近做项目遇到一个需求,要求自行统计网站的,并显示到后台。于是我们可以通过的日志实现。独立地址以公网为依据,每个独立访问该页面,将会产生一个。文件在需要统计的页面引入以下文件,生成一个当天过期的。

最近做项目遇到一个需求,要求自行统计网站的PV、UV、IP,并显示到后台。于是我们可以通过nginx的日志实现。

概念

UV:独立访客;以cookie为依据,假设一台电脑装有3个不同的浏览器,分别打开同一个页面,将会产生3个UV。
PV:访问量;页面每访问或刷新一次,将会产生一个PV。
IP:独立IP地址;以公网IP为依据,每个独立IP访问该页面,将会产生一个IP。

nginx配置

在vhost的conf文件中配置以下信息,请将此conf文件的权限设为777,否则无法自动生成日志文件。

#日志格式化
log_format tongji "$remote_addr - [$time_iso8601]  "$request" "
                        " - $status "User_Cookie:$guid" ";

server {
    listen      80;
    server_name xxx.com;
    index index.html index.htm index.php;
    root /alidata/www/tongji;
    #将cookie中key为guid,value为字母、数字部分保存为guid
    if ( $http_cookie ~* "guid=([a-zA-Z0-9]*)"){
        set $guid $1;
    }
    if ($time_iso8601 ~ "(d{4}-d{2}-d{2})") {
        set $date $1;
    }
    #访问日志引用“tongji”的格式化,并按照日期分割保存。
    access_log /alidata/www/nginx_log/access_$date.log tongji;
    location ~* ^(.*)$ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 8m;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

js文件

在需要统计uv的页面引入以下js文件,生成一个当天过期的cookie。

var cookie = {
    //当天剩下的毫秒数
    leftTime: function() {
        var curTamp = new Date().getTime();
        //当日凌晨的时间戳,减去一毫秒是为了防止后续得到的时间不会达到00:00:00的状态
        var curWeeHours = new Date(curDate.toLocaleDateString()).getTime() - 1;
        var passedTamp = curTamp - curWeeHours;
        var leftTamp = 24 * 60 * 60 * 1000 - passedTamp;
        return leftTamp;
    },
    //n:键名,v:键值,exp:过期时间(ms)
    setCookie: function(n, v, exp) {
        var date = new Date()
        date.setTime(date.getTime() + exp);
        document.cookie = n + "=" + escape(v) +
            ((exp == null) ? "" : ";expires=" + date.toGMTString())
    },
    //n为想要取到的键值的键名
    getCookie: function(n) {
        var reg = /s/g;
        var result = document.cookie.replace(reg, "");
        var resultArr = result.split(";");
        for (var i = 0; i < resultArr.length; i++) {
            var nameArr = resultArr[i].split("=");
            if (nameArr[0] == n) {
                return nameArr[1];
            }
        }
    }
};

//生成随机id
var guid = function() {
    function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    }
    return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4());
};
//如果guid不存在,则生成guid
console.log(cookie.leftTime() / 1000 / 60);
!cookie.getCookie("guid") && cookie.setCookie("guid", guid(), cookie.leftTime());
document.write(document.cookie);

日志文件

内容如下

61.141.xxx.xxx - [2019-05-16T15:18:34+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 

日志分析

命令

//统计IP
awk "{print $1}" xxx/access.log(你的日志文件路径) | sort -r |uniq -c | wc -l
//统计PV
awk "{print $6}" xxx/access.log(你的日志文件路径) | wc -l
//统计UV
awk "{print $10}" xxx/access.log(你的日志文件路径) | sort -r |uniq -c |wc -l

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40421.html

相关文章

  • 前端数据收集(pv/uv

    摘要:之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现的最重要尺度。在同一天内,只记录第一次进入网站的具有独立的访问者,在同一天内再次访问该网站则不计数。 所谓web,即使你我素未谋面,便知志趣相投;足不出户,亦知世界大。 01 — 什么是PV/UV 网站流量分析,是指在获得网站访问量基本数据的情况下对有关数据进行统计、分析,从中发现用户访问网站的规律,并将这些规律与网...

    import. 评论0 收藏0
  • 前端数据收集(pv/uv

    摘要:之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现的最重要尺度。在同一天内,只记录第一次进入网站的具有独立的访问者,在同一天内再次访问该网站则不计数。 所谓web,即使你我素未谋面,便知志趣相投;足不出户,亦知世界大。 01 — 什么是PV/UV 网站流量分析,是指在获得网站访问量基本数据的情况下对有关数据进行统计、分析,从中发现用户访问网站的规律,并将这些规律与网...

    lolomaco 评论0 收藏0
  • 宝塔面板优惠券永久版:宝塔Linux面板仅2088元;宝塔windows面板仅2488元

    摘要:宝塔面板优惠券永久授权版多少钱宝塔面板让运维简单高效。目前,很多站长及企业可能会购买宝塔面板专业版或企业版,宝塔面板专业版仅元宝塔面板专业版仅元宝塔面板企业版仅元年宝塔面板企业版仅元年起。如宝塔数据同步工具主从复制。宝塔面板优惠券永久授权版多少钱?宝塔面板让运维简单高效。面板支持Linux与Windows系统。一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过Web端轻松管理云...

    laznrbfe 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<