
你的服务器每天产生几百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,生成一份报告。你可能会惊讶:原来我的用户是这样用网站的。数据就在那里,等你去挖。




