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

更新日期: 2019-05-17阅读: 2.7k标签: 网站

最近做项目遇到一个需求,要求自行统计网站的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://fly63.com/article/detial/3345

个人网站如何接入支付功能_支持个人支付的第三方平台整理

作为个人开发者,为自己的辛苦开发的项目配上支付功能,才有盈利的盼头!但是目前大部分都需要企业资质,那对应个人而言如何在网站、应用中接入支付功能呢?这里找了一些不需要企业资质的第三方支付平台。

网站内容检测——在线原创文章相似度在线检测工具总汇

为了自己网站上文章的质量,我们可以通过一些在线的原创文章相似度在线检测工具,进行检测自己的文章和网上相关文章的相似率!下面就为此整理了一些目网上已有的工具,以供大家参考使用

郑州网站建设告诉你移动端网站关键词怎么优化

移动端网站关键词怎么优化?现在人人都要用手机,手机已经成为我们生活中不可或缺的一部分,移动端也越来越重要了,很多企业都开始关注移动端关键词排名,移动端和PC端排名为什么差这么大,移动端关键词优化方法是什么?

新网站如何加快收录?

对于一个新网站来说,希望短时间内被收录无疑是网站经营者最关注的的问题。那么就让我们了解一下!新网站上传之后,首先在百度搜索上输入你的网站网址,然后主动向百度提交你的网站

了不起的gatsby.js_一个现代化开发网站的网站产生系统

GatsbyJS 是一个现代化开发网站的网站产生系统,拥有完整、丰富且开源的生态圈。它利用 React + GraphQL 产生的多页面应用,让前端工程师,编辑,用户都感到满意。就让我们一步步地探索这个系统吧。 GatsbyJS 是一个拥有超过 2万 Stars,3500 forks 的 React 网站生成系统。

大型网站架构设计方向初探

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展

Chrome无法从该网站添加应用,扩展程序和用户脚本

更新谷歌浏览器之后发现不能通过本地 crx文件安装离线插件了,网上找到的方法有两种 :一个就是通过添加浏览器参数解决 但是这个方法我尝试之后失败了 ,第二个方法就是用工具安装,具体如何太麻烦了就没有用

在网站建设的时候需要考虑哪些因素?

站制作公司数不胜数,每家公司使用域名、服务器的提供商也是不同,制作网站使用代码语言、模板、自主研发的系统都是各不相同。网站整体的设计要好,这个设计,一是指网站的代码设计,最好采用PHP+MySQL的形式,像目前建站比较流行的Dedecms,Wordpress

新手如何学做网站_ 新手做网站买服务器

很多新手想做一个网站却不知道怎么做,今天呢,我就给有建网站需求的小伙伴们来说一说从建网站的步骤,还有一些常见问题的解决办法。在网络上的主机都有自己唯一的标识也就是你的IP地址,因为IP地址较长,不容易记忆

免费下载视频、图片素材的网站

找视频素材的网站,免费视频素材资源,如何免费下载视频素材? 推荐视频素材哪个网站好:videezy、pexels、splashbase 、footage crate、monzoom、Wedistill、Mazwai

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!