转载:通过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
												

最新文章

  1. VMware ubuntu中执行python文件的操作小结
  2. 24、ASP.NET MVC入门到精通——数据库仓储
  3. Discuz 网站移至 Ubuntu 14.04.4 LTS VPS 配置
  4. ScriptManager和ClientScript的区别
  5. 一篇不错的讲解Java异常的文章(转载)
  6. 【LeetCode】139 - Word Break
  7. Git / Bower Errors: Exit Code # 128 &amp; Failed connect
  8. UESTC_Rain in ACStar 2015 UESTC Training for Data Structures&lt;Problem L&gt;
  9. 轻量级数据库sqlite的编译
  10. 关于Elixir游戏服设计系列
  11. 如何一条sql语句查找表中第二大值
  12. HDU 5538 House Building(模拟——思维)
  13. 【linux之crontab,启动】
  14. codeforces158D
  15. Java内存可见性
  16. Latex 公式居中
  17. Vue.js最佳实践
  18. Pytorch半精度浮点型网络训练问题
  19. C语言怎么简单测试为大小端模式
  20. RecordingOptions录制设置选项

热门文章

  1. MySQL之二进制日志
  2. linux下使用SVN上传项目
  3. ES6内建对象的继承
  4. (2) Java SQL框架(java.sql.*)中常用接口详解
  5. easyui datagrid设置一开始不加载数据
  6. iOS技术面试01:多线程与网络
  7. npm的问题【解决】
  8. Echarts 图表的本地配置
  9. 使用Rabbit MQ消息队列
  10. iframe里访问父级里的方法属性