从零开始搭建自己的网站二十一:网站IP/PV统计功能设计
这里先介绍几个概念
IP: 指独立IP数。00:00-24:00内相同IP地址之被计算一次。
PV:即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。
UV: 即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
统计功能可以借助一些其他工具进行统计。具体哪些工具就不细说了,可以通过类似在页面上加<script>等统计,我们这里是自己实现用户访问的统计。
我们在采用过滤器中进行页面的统计。
//过滤器
@Component
public class SimpleCORSFilter implements Filter {@Autowiredprivate IPCountService ipCountService;public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {//过滤器层面进行统计访问量ipCountService.addIPCountOther(req);HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with");chain.doFilter(req, res);}public void init(FilterConfig filterConfig) {}public void destroy() {}}
//service方法@Overridepublic void addIPCountOther(ServletRequest req) {String requestURL = ((RequestFacade) req).getRequestURI();if (requestURL.endsWith(".css") || requestURL.endsWith(".js") || requestURL.endsWith(".png") || requestURL.endsWith(".woff2") || requestURL.endsWith(".ico") || requestURL.endsWith(".woff") ||requestURL.endsWith(".gif") || requestURL.endsWith(".css") || requestURL.endsWith(".jpg") || requestURL.endsWith("/404")) {return;}IPCount ipCount = new IPCount();ipCount.setUrl(requestURL);ipCount.setAccessTime(new Date());String realIP =IPUtils.getRemoteIp((HttpServletRequest) req);ipCount.setIPAddress(realIP);ipCount.setFilterType(2);ipCountDao.addIPCount(ipCount);}
/*** 获取IP地址** @param request HttpServletRequest* @return IP地址*/public static String getRemoteIp(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");logger.info("[IPUtils getRemoteIp] Proxy-Client-IP:" + ip);}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");logger.info("[IPUtils getRemoteIp] WL-Proxy-Client-IP:" + ip);}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();logger.info("[IPUtils getRemoteIp] getRemoteAddr:" + ip);}if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Real-IP");logger.info("[IPUtils getRemoteIp] X-Real-IP:" + ip);}return ip;}
在Nginx.conf 这个配置文件中加入
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-For $http_x_forwarded_for;
这样,我们可以通过 X-Real-IP 这个消息头获取到真实路径。因为我们通过Nginx做服务器,所有Nginx访问tomcat的时候,获取的IP时为127.0.0.1;
下面是截取了数据库中的一部分登录IP数据,我们就可以根据数据来统计每日的IP和PV了。而且也可以看到一些不友善的访问,比如下面的wp-login.php这种。后面我们就可以根据访问情况进行网站的维护和优化。
欢迎转载,转载请注明出处 http://www.dingyinwu.com/article/66.html
如果文章中有任何问题或者可以改进的地方,请大家多提提意见,我会非常感激。
从零开始搭建自己的网站二十一:网站IP/PV统计功能设计相关推荐
- 从零开始搭建无人机导航系统(二)——初识传感器(二)
前言 上一篇中,我们初步了解了多旋翼无人机最常用,也是最核心的几种传感器--IMU.气压计.磁力计.GPS.基于以上几种传感器,我们能够搭建一套完整的组合导航系统,从而对无人机的姿态.速度.位置等信 ...
- 网站流量度量术语 IP PV UV
1.IP IP(独立IP),即 Internet Protocol,这里指独立IP数,独立IP数是指不同IP地址的计算机访问网站时被计的总次数.独立IP数是衡量网站流量的一个重要指标.一般一天内(00 ...
- 从零开始搭建Vue2.0项目(二)之集成axios
文章目录
- 零基础小白,如何从零开始搭建网站?(详细步骤)
拥有一个自己的网站是一件多么美妙的事? 可以随时写博客文章.不用担心这个不规范.那个不合规的,只要不违法,随心所欲做博主.如果放到第三方网站上,还担心哪天对方倒闭了,会白白浪费多年时间,积累全无! 可 ...
- 真正从零开始搭建网站—宝塔面板+wordpress(超详细教程)
如果还有不了解宝塔面板怎么使用的小伙伴,可以看下我总结的系列教程,保证从新手变老鸟: [宝塔面板精选教程汇总] 宝塔面板教程(1)基于云服务器搭建宝塔面板教程最全详解 宝塔面板教程(2)宝塔面板添加W ...
- JavaScript 编程精解 中文第三版 二十一、项目:技能分享网站
二十一.项目:技能分享网站 原文:Project: Skill-Sharing Website 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了<JavaScri ...
- 从零开始搭建自己的网站一:整体步骤
之前我的博客内容都是写在CSDN上(博客地址),后来玩过GitHub(博客地址).今天我们从零开始搭建一个属于自己的博客网站,包括服务器,数据库等. 步骤分别为: 1.购买一台云服务器(我购买的阿里云 ...
- 从零开始搭建自己的网站可外网访问从购买服务器开始
从零开始搭建一个自己的网站 1.购买云服务器 2.进入云服务器修改文件 3.上传html文件 4.外网访问 5. 其他 5. 申请及绑定绑定域名 1.购买云服务器 想要自己搭建的网页可以被别人看到,不 ...
- 【个人网站】零基础个人网站搭建完整教程二(网站服务器配置)
零基础个人网站搭建完整教程(二) 内容包括:前端搭建+后端搭建+如何选购服务器和域名+连接服务器+上传代码+网站上线(完整教程) 从0到1搭建网站 零基础个人网站搭建完整教程(二) 前言 三.选购服务 ...
最新文章
- 同事乱用 Redis 卡爆,我真是醉了...
- 抛弃UITableView,让所有列表页不再难构建
- 支持的网卡列表_Windows 10的5G网卡折腾笔记(含采购链接)
- postgresql测试题_PostgreSQL练习
- Linux 创建交换(swap)分区
- 【翻译】Nginx的反向代理
- 【飞秋怎么用】企业应用
- (4)Linux进程调度-组调度及带宽控制
- 五大最主流浏览器综合性能测试
- CIO感悟:IT人转型之“势、道、术”
- 项目经理的第二手准备-坚强的挺着(4)
- MongoDB进阶系列(12)——MongoDB 固定集合
- ESP32 Uart串口控制器
- 一些好用的链接(持续更新)——视频相关
- 百度地图开发-在百度地图上面显示出运动的轨迹
- 什么猫猫最受欢迎?Python采集猫咪交易数据
- java毕业设计坝上长尾鸡养殖管理系统Mybatis+系统+数据库+调试部署
- 无惧黑暗强光,纯视觉导航也能全天候作业
- Non-local的一些理解
- TIPTOP 4GL——自定义按钮前加图标
热门文章
- RabbitMq安装Web界面插件报错
- pytorch神经网络对Excel数据集进行处理2.0(读取,转为tensor格式,归一化),并且以鸢尾花(iris)数据集为例,实现BP神经网络
- nodemon : 无法加载文件 C:\Users\cell\AppData\Roaming\npm\nodemon.ps1,因为在此系统上禁止运行脚本。
- FPGA驱动24C04实现读写操作,提供工程源码和技术支持
- 转:typedef的用法
- Python之图片转PDF
- 掌握 Windows 命令行界面:常用 DOS 命令简介
- 微信小程序中background-attachment:fixed兼容问题
- 来自一个敲了5年代码的网络安全工程师的自述(目前薪资20K)
- 如何提高网站关键词排名和增加收录量