网站访问日志分析:从IP到用户行为

网站访问日志分析:从IP到用户行为

你的服务器每天产生几百MB的访问日志。你用它来查报错、找攻击IP。但日志里还藏着更有价值的东西——用户从哪里来、喜欢看什么、什么时候来、什么时候走。你不看,就浪费了。

今天教你从日志里挖出这些信息。不用装复杂工具,几条命令就够了。


先看一个数据

某电商网站分析日志后发现,40%的流量来自某个小众论坛的一条帖子。他们在那个论坛加大投放,转化率提升了3倍。如果不是看了日志,他们永远不会知道流量从哪来。日志里全是黄金,大部分人只看到了土。


日志里有什么

Nginx默认access.log格式:

text

192.168.1.100 - - [10/Jun/2026:14:30:25 +0800] "GET /product/123 HTTP/1.1" 200 15234 "https://google.com" "Mozilla/5.0..."

每个字段都有用:

字段含义能分析出什么
远程IP访客IP独立访客数(UV)、地域分布
时间戳访问时间访问高峰时段
请求方法/路径GET /product/123热门页面、热门商品
状态码200/404/500错误率、死链
响应大小15234字节流量消耗、大页面
Referer从哪跳过来流量来源渠道
User-Agent浏览器/设备设备类型、浏览器分布

基础统计:一行命令

总访问量(PV)

bash

wc -l /var/log/nginx/access.log

独立访客(UV)

bash

awk '{print $1}' /var/log/nginx/access.log | sort | uniq | wc -l

awk '{print $1}'取第一列IP,sort | uniq去重。

最热门的10个页面

bash

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

$7是请求路径,uniq -c计数,sort -nr按次数倒序。

访问量最高的10个IP

bash

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

如果某个陌生IP排第一,可能是爬虫或攻击。


时间段分析:找访问高峰

按小时统计访问量,知道什么时候用户最多,什么时候服务器最闲。

bash

awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2 | sort | uniq -c | sort -nr | head -10

$4是时间戳,cut -d: -f2取小时部分。输出示例:

text

 2345 14
 2100 15
 1980 20

下午2-3点高峰。在这个时间段搞促销,效果最好;在这个时间段重启服务器,用户骂你。在凌晨低谷期做备份、更新。


来源分析:流量从哪来

分析Referer,知道用户是从搜索引擎、社交媒体、还是直接访问进来的。

bash

awk -F'"' '{print $4}' /var/log/nginx/access.log | grep -v "^-" | sort | uniq -c | sort -nr | head -10

-F'"'用双引号分割,$4是Referer。grep -v "^-"去掉空的。

输出示例:

text

 3450 https://www.google.com/search?q=xxx
 1200 https://www.baidu.com/s?wd=xxx
  800 https://twitter.com/xxx

Google和百度来的最多,说明SEO做得好;Twitter来的少,可以考虑加强社交推广。


设备分析:用户用什么访问

bash

awk -F'"' '{print $6}' /var/log/nginx/access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr | head -5

输出示例:

text

 4500 Mozilla/5.0
  800 Mozilla/4.0
  200 curl

大部分是移动端还是PC端?看User-Agent里的Mobile字段。

bash

grep -c "Mobile" /var/log/nginx/access.log

移动端占比高的话,网站要做响应式设计,测试重点放在手机上。


错误分析:找用户体验问题

统计4xx和5xx错误。

bash

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

$9是状态码。大量404说明有死链,用户点进来看到“找不到页面”,影响体验。

bash

# 找出404最多的页面
awk '$9 == 404 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

看到哪些页面被频繁访问但不存在,加个重定向或者补上内容。

大量500说明代码有bug,去修。

bash

# 找出500错误最多的URL
awk '$9 == 500 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

用GoAccess生成可视化报告

命令行的输出不够直观。用GoAccess一键生成HTML报告,图表展示。

bash

sudo apt install goaccess -y
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED

浏览器打开http://你的IP/report.html,看到仪表盘:PV趋势、热门页面、访客分布、状态码比例。适合定期发给团队看。

配合crontab每天自动生成:

bash

0 1 * * * goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED

每天早上看一眼昨天的报告,心中有数。


真实案例

一个内容网站,某天访问量突然翻倍。看日志,Referer显示大量流量来自一个科技论坛的帖子。他们去论坛看了,有人发帖推荐了他们的某篇文章。他们在那篇帖子下回复互动,引流持续了一周。主编说:“以前只知道今天流量高了,不知道为什么。现在知道来源,就知道该在哪使劲。”

另一个案例:分析设备类型后发现70%用户来自手机,但PC端页面的图片太大,手机加载慢。专门优化手机版后,跳出率从65%降到40%。


最后一句

日志不只是用来查错的。它是你的用户留给你的数据金矿。用户从哪来、喜欢什么、什么时候来、用什么设备——全记在里面。你要做的,是学会读取。

明天早上,去服务器上跑一行goaccess,生成一份报告。你可能会惊讶:原来我的用户是这样用网站的。数据就在那里,等你去挖。

首页

云服务器IP地址详解:公网IP、内网IP、弹性IP的区别

2026-6-9 15:59:11

知识库软件分享

宝塔面板(BT Panel)最新版安装教程与常见问题解决方法 (2025)

2025-4-21 12:30:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧