转载:通过Nginx统计网站的PV、UV、IP

概念

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() - ;
var passedTamp = curTamp - curWeeHours;
var leftTamp = * * * - 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 = ; i < resultArr.length; i++) {
var nameArr = resultArr[i].split("=");
if (nameArr[] == n) {
return nameArr[];
}
}
}
}; //生成随机id
var guid = function() {
function S4() {
return ((( + Math.random()) * 0x10000) | ).toString().substring();
}
return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4());
};
//如果guid不存在,则生成guid
console.log(cookie.leftTime() / / );
!cookie.getCookie('guid') && cookie.setCookie('guid', guid(), cookie.leftTime());
document.write(document.cookie);

日志文件

内容如下:

61.141.xxx.xxx - [--16T15::+:]  "GET /ttt.html HTTP/1.1"  -  "User_Cookie:032284f362a63e3d375f8176aad4e0d7"
61.141.xxx.xxx - [--16T15::+:] "GET /ttt.html HTTP/1.1" - "User_Cookie:032284f362a63e3d375f8176aad4e0d7"
61.141.xxx.xxx - [--16T15::+:] "GET /ttt.html HTTP/1.1" - "User_Cookie:032284f362a63e3d375f8176aad4e0d7"
61.141.xxx.xxx - [--16T15::+:] "GET /ttt.html HTTP/1.1" - "User_Cookie:032284f362a63e3d375f8176aad4e0d7"
61.141.xxx.xxx - [--16T15::+:] "GET /ttt.html HTTP/1.1" - "User_Cookie:032284f362a63e3d375f8176aad4e0d7"
61.141.xxx.xxx - [--16T15::+:] "GET /ttt.html HTTP/1.1" - "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
												

通过Nginx统计网站的PV、UV、IP的更多相关文章

  1. NGINX: 统计网站的PV、UV、独立IP

    做网站的都知道,平常经常要查询下网站PV.UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问数据做下统计: 概念: UV(Uniqu ...

  2. 网站的PV,UV,IP名词解释

    PV:PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次.注意,访客每刷新一次页面,pv就增加一次. UV:UV是Unique Visitor的缩写,即独立 ...

  3. PV,UV,IP

    参加了DTCC归来之后,各大电商技术大牛都会自豪的分享一下自己公司网站的PV,流量等等.当时也是一知半解,回来之后赶紧查了查,也算是扫扫盲. 以下摘自网络中,自己稍稍做了整理,对于PV,流量和带宽的理 ...

  4. PV&UV&IP之间的区别和联系

    PV PV是网站分析的一个术语,用于衡量网站用户访问的网页的数量.对于广告投入商来说,PV值可以预期它可以带来多少收入广告,一般来说,OV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量 ...

  5. 网站的PV UV IP---网站常见软件性能

    IP,衡量不同时间段的上网人数.00:00-24:00内相同的地址被计算一次.例:日300W IP,至少300W人访问PV,衡量页面受欢迎程度.每刷新一次,被记录一次(刷pv),网站被访问的页面的数量 ...

  6. PV,UV,IP概念

    PV是网站分析的一个术语,用以衡量网站用户访问的网页的数量.对于广告主,PV值可预期它可以带来多少广告收入.一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量,如同一个来访者 ...

  7. PV UV IP含义及区别

    --------首先来看看ip.uv和pv的定义---------- PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次. UV(独立访客):即Unique Vis ...

  8. 学习笔记_过滤器应用_1(分ip统计网站的访问次数)

    分ip统计网站的访问次数 ip count 192.168.1.111 2 192.168.1.112 59 统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做 ...

  9. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...

随机推荐

  1. 我的iOS动画01

    1.嵌套使用,先变大再消失 [UIView animateWithDuration:1.25 aniamtions:^{ CGAffineTransform newTRansform = CGAffi ...

  2. Day6作业:计算器

    嗯,稀里糊涂就居然写完了...... readme: 程序说明: 此计算器比较简单,只支持普通的加减乘除和小括号,不支持[],{},求幂之类的均不支持! 测试过的字符串: -1/2*((60-30+( ...

  3. mysql的root用户无法给普通用户授权问题处理

    1.查看Grant_priv是Y还是N 执行下面 select * from mysql.user where User='root' and Host='%'\G; 下图查看结果为Grant_pri ...

  4. 为何有DAO与Service层?为何先搞Dao接口在搞DaoImpl实现?直接用不行吗?

    转自 http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html 我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类 ...

  5. 从源码角度解析Netty的React模式是如何工作的

    Netty 支持多种实现方式,比如nio,epoll 等,本文以nio的实现方式进行讲解. 1.EventLoop : 事件循环看,简单来说就是一个死循环监听事件,如果事件来了,处理掉.通常做法就是开 ...

  6. Nginx负载均衡中4层代理和7层代理对比

    1.4层代理和7层代理什么意思? 这里的层是OSI 7层网络模型,OSI 模型是从上往下的,越底层越接近硬件,越往上越接近软件,这七层模型分别是物理层.数据链路层.网络层.传输层.会话层.表示层.应用 ...

  7. 20190923-基于Python3的RobotFramework的配置是初次使用

    因为最近改自动化框架在网上找了很多框架,发现RobotFramework不错,但是网上的资料很杂,现在将自己配置框架的学习笔记分享 Python配置RobotFramework的seleniumlib ...

  8. Arduino图形化编程软件ArduBlock的安装过程

    ArduBlock是一款图形编程插件,接下来我们在Windows10上进行安装 注意ArduBlock虽然能安装在1.83版本的Ardunio上,但在载入程序时会报错,用本身的IDE不会出现这种情况. ...

  9. 最新 美柚java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 美柚等10家互联网公司的校招Offer,因为某些自身原因最终选择了 美柚.6.7月主要是做系统复习.项目复盘.LeetCo ...

  10. order pick-up and delivery problem

    问题一: pi表示取第i个单,di表示送第i个单.di不能在pi的前面.给一个取单送单的顺序,问是否是valid顺序. public boolean isValidOrderList(List< ...