分析apache日志中特定域名访问量需依托referer或host字段:referer可提取来源域名(如awk -f'"' '{if(nf>=6) print $6}' | grep -i "example\.com"),host需日志含%{host}i字段;须过滤空值、ip地址及爬虫,确保统计准确。

要分析 Apache 访问日志中特定域名的访问量,核心是识别并提取日志中与该域名相关的请求记录——这通常依赖于 Referer 字段(来源页面)或 Host 头(通过日志中的请求行或自定义字段体现),而非仅靠 IP 或路径。实际操作需结合日志格式和业务场景判断数据来源。
确认日志是否记录了域名相关信息
Apache 默认 combined 格式不直接记录 Host 域名,但可通过以下方式获取:
- 若日志中启用了
%{Host}i(如配置LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\""),则 Host 域名会出现在字段末尾,可用awk '{print $(NF)}'提取最后一列 - 更常见的是从
Referer字段提取:它位于 combined 日志第 7 个双引号内,例如"https://example.com/page",可用正则"([^"]*://[^"/]+)或awk -F'"' '{if(NF>=6) print $6}' | awk -F'://' '{print $2}' | cut -d'/' -f1抽取主域名 - 注意:部分请求 Referer 为空(直接访问)或为内部路径(如
/login),这类需单独归类为 “Direct” 或 “Internal”
统计指定域名的总访问次数
以统计 example.com 为例,命令简洁有效:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 按 Referer 匹配(含子域):
awk -F'"' '{if(NF>=6) print $6}' access.log | grep -i "example\.com" | wc -l - 精确匹配主域名(排除
sub.example.com):awk -F'"' '{if(NF>=6 && $6 ~ /:\/\/example\.com(\:|\/|$)/) print $6}' access.log | wc -l - 若日志含 Host 字段且在最后一列:
awk '{print $NF}' access.log | grep -i "^example\.com$" | wc -l
按域名分组统计并排序
适用于多域名共存的虚拟主机环境,快速对比各域名引流效果:
- 从 Referer 提取并去重统计:
awk -F'"' '{if(NF>=6 && $6 ~ /^https?:\/\//) {n=split($6,a,"/"); if(n>2) print a[3]}}' access.log | sort | uniq -c | sort -nr - 增强版(过滤空值、统一小写、剔除 IP 形式 Host):
awk -F'"' '{if(NF>=6 && $6 ~ /^https?:\/\//) {n=split($6,a,"/"); if(n>2 && a[3] !~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) print tolower(a[3])}}' access.log | sort | uniq -c | sort -nr | head -10
排除干扰、提升准确性
真实日志中常混杂爬虫、监控探针、站内跳转等非目标流量:
- 跳过空 Referer 和纯 IP Host:
grep -v ' "-"$' access.log | grep -v ' "http://[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+.*"$' - 过滤常见爬虫 UA(配合 Referer 使用更稳妥):
awk -F'"' 'NF>=6 && $6 ~ /example\.com/ && $NF !~ /bot|crawler|spider|wget|curl|monitor/i {print}' access.log | wc -l - 若需区分 HTTP/HTTPS 或端口(如 example.com:8080),可在提取后用
sed 's/:.*$//'统一标准化










