虚拟主机流量统计怎么看:AWStats 与访问日志定位异常流量来源

虚拟主机流量统计面板与访问日志的排查入口

[虚拟主机](https://cn.hostease.com/shared-hosting.html)套餐标着不限流量,月度统计却从 3GB 跳到 42GB;主机商问一句”最近是不是被刷了”,你也答不上来。这篇指南要解决的正是这个问题:如何看懂虚拟主机流量统计——先把 AWStats(主机面板自带的访问统计工具)里的访问量、页面数和传输字节分清楚,再用访问日志把异常流量落到具体的 IP、URL 和 User-Agent,最后用几条命令验证处理效果。看完你能自己判断这波流量来自爬虫、盗链还是扫描,不必等到账户被限速才发现。

一、先分清 AWStats 里的四个数字

打开面板里的 AWStats 页面,第一屏会同时给出四组数字,它们回答的是不同问题:独立访客(Unique visitors)是按 IP 加 Cookie 去重后的人数;访问次数(Visits)是会话数,同一个人半小时内来回点击只算一次;页面(Pages)是真正被打开的 HTML 文档数;传输量(Bytes)才是计费口径,也就是服务器实际吐出去的字节总数。

最容易误读的是命中数(Hits)。一次首页浏览会连带请求 CSS、JS、字体和十几张图片,命中数往往是页面数的 20 到 50 倍。所以看到 Hits 破百万先别慌,把 Pages 和 Bytes 拉在一起看才有意义。真正值得记住的基线只有三个:日均页面数、日均传输量(GB)、以及 200 状态码在全部请求中的占比。

还要区分一个概念:带宽(服务器每秒能向外发送的数据量,单位通常是 Mbps)和月度总流量不是一回事。10Mbps 持续满载,一天就能跑掉约 100GB;反过来,1GB 的月流量也可能因瞬时并发把带宽打满,让访客打开页面一直转圈。AWStats 只统计总量,看不到峰值。

二、异常曲线先看形状,再决定查哪个方向

把 AWStats 的月度视图切成按天,再对照日志按小时聚合,异常流量基本落在四种形状里。形状不同,后面的排查路径完全不同,先分类能省掉一半时间。

  • 平顶型:每小时请求数几乎画成一条直线,波动不超过 5%。多见于采集型爬虫和监控探针,特征是同一个 User-Agent 反复出现,来源 IP 集中在相邻的几个网段。
  • 凌晨尖峰:02:00 到 05:00 之间冲到平时的 8 到 10 倍。要么是备份、同步任务在跑,要么是境外爬虫批量抓取;如果同一时段出现大量 206 状态码,基本可以判定为分段下载图片或视频。
  • 单日爆量:一天之内翻十几倍,第二天回到原位。转载和社交推荐会让页面访问数上涨、来源页集中;被攻击则相反,404 和 403 占比很高,请求集中在少数几个路径上,处置节奏参考 DDoS 应急响应流程。
  • 缓慢抬升:三个月里每月涨 20% 且不回落。通常是页面自己变重了,比如首页轮播换成 3MB 的高清图,这类属于自找的,压缩图片就能回落。

四种典型流量曲线形状与对应的排查方向

分辨形状之后再做一次交叉验证:把同一时段的页面数和传输量相除,得到单页平均体积。正常图文页在 800KB 到 1.5MB 之间,如果单页平均超过 3MB,问题就不在访客数量,而在资源体积本身。

三、访问日志怎么读:几条命令落到 IP 和 URL

面板里的日志一般在 /home/账号/logs/ 目录下,按天切割,文件名形如 example.com-access-log-2026-10-26.gz。每行是 combined 格式记录,字段依次为客户端 IP、时间、请求行、状态码、响应字节、来源页、User-Agent,排查时最有用的是状态码和字节数。

203.0.113.24 - - [26/Oct/2026:03:12:44 +0800] "GET /wp-content/uploads/2026/09/banner.jpg HTTP/1.1" 200 1843200 "-" "Mozilla/5.0 (compatible; AhrefsBot/7.0)"

把日志下载到本地,或者直接在 SSH 里跑下面三条命令,就能把 Top 来源排出来。第一条按 IP 汇总请求数和传输量,重点看请求数不多、字节数却巨大的 IP,盗链和视频抓取通常是这种比例。

awk '{b[$(1)]+=$(10); c[$(1)]++} END {for (i in b) printf "%s %d次 %.1fMB\n", i, c[i], b[i]/1048576}' access.log | sort -k3 -nr | head -20

第二条看被请求最多的路径。如果前 20 名里出现大量 .jpg、.mp4 或 /wp-content/uploads/ 下的附件,说明流量是被静态资源吃掉的,而不是页面真被读了多少次。

awk '{print $(7)}' access.log | sort | uniq -c | sort -nr | head -20

第三条看状态码分布,顺带看一眼 User-Agent。404 加 403 超过 30%,基本可以确认有扫描器在遍历目录;这类流量传输量不大,却会拉起 CPU 和数据库连接,是”流量表没涨、网站却变慢”的常见原因。

awk '{print $(9)}' access.log | sort | uniq -c | sort -nr
awk -F'"' '{print $(6)}' access.log | sort | uniq -c | sort -nr | head

需要按小时而不是按天看的时候,先用 zgrep 截取时间段再统计,例如 zgrep “26/Oct/2026:0[2-5]” example.com-access-log-2026-10-26.gz。想把这套动作变成每日报表,可以照着 访问日志分析的 GoAccess 实践 做,它能把上面几条命令的结果直接画成趋势图,省掉手工汇总。

访问日志字段与统计命令的对应关系

四、四类假流量的判定与处置

把 IP、路径、状态码三张表放在一起看,绝大多数异常都能归到下面四类。每一类的处置方式不同,用错方法往往白折腾一天。

  • 采集型爬虫:Top UA 里出现 python-requests、Go-http-client、AhrefsBot 之类,单个 IP 每小时请求 300 次以上却从不加载 CSS。robots.txt 的 Crawl-delay 对恶意一方没有约束力,直接在面板按网段限速,或者照 Nginx 屏蔽恶意爬虫 的 User-Agent 加频率规则处理更彻底。
  • 图片与附件盗链:AWStats 的”外部来源页”里出现别人的域名,日志中图片请求的 referer 指向外站,状态码清一色 200。给图片目录加白名单防盗链,或者接入 CDN(内容分发网络)缓存层,让节点只回源本站的请求,盗链方消耗的是节点流量而不是你的主机额度。
  • 目录扫描与后台爆破:大量 404、403 集中在 /wp-login.php、/.env、/admin.php 这类路径。处理重点是限速加登录保护,别一上来就封整个网段,容易误伤真实访客;判断是否需要更重的拦截,看的是同一 IP 对同一路径的请求间隔,低于 1 秒就属于脚本行为。
  • 被转载带来的真实洪峰:某个页面流量暴涨、来源页集中在同一个平台、200 占比超过 90%。这种流量不该拦,把页面缓存打开、图片压到 WebP、必要时挂 CDN 就能顶住。

第一类和第四类最容易混淆,因为 200 占比都高。区分只有一招:看 User-Agent 长尾——真实访客的 UA 分散在几十种浏览器版本上,爬虫的 Top 3 就能覆盖八成请求。

正常访客流量与盗链爬虫流量在结构上的差异

五、改完以后用三个指标验证

处置动作上线后别急着关单,隔 24 小时再翻同一份统计,确认三个数字都回落。第一是 200 状态码占比,正常站点通常在 85% 以上;加了拦截规则后如果反而掉到 70%,说明规则误伤了正常请求,得回头收紧网段。第二是日均传输量,按天看 GB 数,正常情况下应在 48 小时内回到基线附近。第三是单页平均体积,它决定同样的访客数会不会又把额度撑爆。

在 SSH 里可以用 vnstat 看历史曲线,它比面板更细:vnstat -d 给出最近 30 天每日总量,vnstat -h 给出最近 24 小时逐小时分布,配合 nload 还能看实时进出速率。参数解读见 服务器流量异常排查 那篇,这里不重复。需要提醒的是,限速类规则上线后先观察 6 小时,一旦发现正常访客被 403,立刻回滚,不要等到收到投诉才处理。

六、优化到头之后,判断是不是该换方案

有些站图片压到 200KB、缓存也开了、爬虫也拦了,月度传输量还是压不下去,那问题就不在配置,而在套餐规格。判断标准可以落在两个数上:日均传输量连续两周超过套餐额度的 60%,或者单日峰值触到带宽上限、导致 TTFB 超过 1 秒。这时继续调优的收益很低,每月的维护时间成本反而高于升级差价。

如果是访问量真实增长,先看 共享主机、VPS 与独立服务器的选择方法 里的匹配逻辑;需要隔离资源、自己装扩展时,[VPS](https://cn.hostease.com/vps/)([虚拟专用服务器](https://cn.hostease.com/vps/),在物理机上切出独享资源的运行环境)比共享环境更合适;流量峰值只出现在活动期、平时很闲,则更适合云服务器(按需分配 CPU 与内存的虚拟服务器),按量计费能省掉闲时成本。Hostease 的虚拟主机方案在面板里直接开放月度流量明细与 AWStats 权限,可以照上面的方法自查;但共享环境有并发和进程数限制,决定要不要升级的从来不是总流量,而是同时在线请求数。

七、把流量统计变成每周十分钟的例行检查

流量异常很少是突然发生的,多数时候它在统计里已经留了两三周的痕迹。把上面的流程固定成每周一次,成本很低:打开 AWStats 记下页面数、传输量和 200 占比;导出当天的访问日志,跑一遍那几条命令;把 Top IP 和 Top URL 截图存档。连续四周之后你就有了自己网站的流量基线,任何偏离基线的波动都能在一周内被发现,而不是等主机商发来限速邮件。

如果精力更想放在业务上,建议至少把自动化做掉一半:用 cron 每天凌晨把日志按 IP 和状态码汇总成一行文本发到邮箱,出现异常再人工介入。推荐先从状态码分布开始,因为它同时反映扫描、爬虫和配置错误,是投入产出比最高的一项指标。总结一句:看懂虚拟主机流量统计的关键不在工具,而在于把总量拆成三问——谁在请求、请求了什么、服务器回了什么。这三问一旦形成习惯,40GB 的莫名流量就不再是谜。

发表评论