虚拟主机服务器的访问日志是网站管理员最有价值的诊断工具之一。每一个 HTTP 请求——无论来自真实访客、搜索引擎爬虫、安全扫描器还是暴力攻击者——都会在此文件中留下痕迹。如果您的网站莫名变慢、收到可疑流量,或怀疑发生了安全事件,分析访问日志始终是正确的第一步。本指南将带您了解如何在 DirectAdmin 主机上读取 Apache 访问日志,提取有意义的洞察,并使用标准 Linux 命令行工具识别机器人和安全威胁。

什么是访问日志以及如何在 DirectAdmin 中找到它

Apache Web 服务器是大多数共享主机环境的核心引擎,它会自动将每个传入的 HTTP 请求记录到访问日志中。这包括页面浏览、图片加载、API 调用,以及各类机器人(合法的和其他的)的爬取请求。

在 DirectAdmin 主机中,您可以通过以下几种方式访问日志文件:

DirectAdmin 环境中典型的日志文件路径:

/home/username/logs/domainname.com-access_log
/home/username/logs/domainname.com-error_log

了解访问日志格式——逐字段解析

Apache 默认的组合日志格式(Combined Log Format)将每条日志记录结构如下:

IP - - [DATE TIME +ZONE] "METHOD URL PROTOCOL" STATUS BYTES "REFERER" "USER-AGENT"

以下是一个实际示例,包含两条记录——一条来自合法访客,另一条来自扫描机器人:

203.150.45.12 - - [09/Jun/2026:10:23:41 +0700] "GET /about.html HTTP/1.1" 200 8452 "https://google.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
185.220.101.5 - - [09/Jun/2026:10:24:02 +0700] "GET /wp-login.php HTTP/1.1" 404 1234 "-" "python-requests/2.28.0"

各字段说明:

字段 说明 示例
IP 地址 请求的来源 IP 203.150.45.12
日期/时间 带服务器时区偏移的时间戳 [09/Jun/2026:10:23:41 +0700]
方法 + URL HTTP 方法和请求路径 "GET /about.html HTTP/1.1"
状态码 服务器返回的 HTTP 响应码 200, 404, 403, 500
字节数 响应正文的大小(字节) 8452
来源页面 用户来源 URL,直接访问则为 "-" "https://google.com"
用户代理 浏览器或机器人软件标识符 "Mozilla/5.0..."

日志分析必备的 grep 和 AWK 命令

了解日志格式后,您可以使用标准 Linux 工具——grep、awk、sort 和 uniq——来过滤、计数并发现规律。这些工具预装在每台 Linux 服务器上,无需额外软件。

查看最新的 20 条日志记录

tail -n 20 ~/logs/domainname.com-access_log

统计每个 IP 地址的请求数(前 20 名)

awk '{print $1}' ~/logs/domainname.com-access_log | sort | uniq -c | sort -rn | head -20

显示来自特定 IP 的所有请求

grep "^185.220.101.5" ~/logs/domainname.com-access_log

查找所有 404 错误并按 URL 分组

grep '" 404 ' ~/logs/domainname.com-access_log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

识别非浏览器 User-Agent

grep -v "Mozilla\|Googlebot\|Bingbot\|Twitterbot\|facebookexternalhit" ~/logs/domainname.com-access_log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -20

识别访问日志中的恶意机器人

并非所有自动化请求都有害,但某些类型的机器人会消耗服务器资源而不贡献任何价值,或主动探测漏洞。了解如何将恶意机器人与合法爬虫区分开来,是每位网站运营者的基本安全技能。

在访问日志中标记恶意机器人的特征:

找出产生最多 404 错误的 IP(扫描器特征):

grep '" 404 ' ~/logs/domainname.com-access_log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

按请求量列出可疑 User-Agent:

awk -F'"' '{print $6}' ~/logs/domainname.com-access_log | sort | uniq -c | sort -rn | grep -i "python\|curl\|go-http\|libwww\|scan\|bot\|crawler" | head -20

检测 WordPress 网站上的暴力攻击

WordPress 登录端点是互联网上被攻击最多的路径之一。如果您运营 WordPress 网站,定期监控访问日志中的 /wp-login.php 和 /xmlrpc.php 应成为日常习惯。暴力攻击表现为单个 IP——或来自同一子网的一组协调 IP——在短时间内向这些路径发送重复的 POST 请求。

# Count POST requests to wp-login.php by IP
grep '"POST /wp-login.php' ~/logs/domainname.com-access_log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# Count POST requests to xmlrpc.php by IP
grep '"POST /xmlrpc.php' ~/logs/domainname.com-access_log | awk '{print $1}' | sort | uniq -c | sort -rn

如果任何 IP 在 10 分钟内有超过 20 次 POST 尝试,立即通过 .htaccess 封锁该 IP:

# Block a single IP in .htaccess
Order allow,deny
Allow from all
Deny from 185.220.101.5

# Block an entire /24 subnet
Deny from 185.220.101.0/24

对于持续性或分布式暴力攻击,可以考虑在 WordPress 登录页面添加 CAPTCHA、如果不使用则完全禁用 xmlrpc.php,或使用安全插件移动登录 URL。

检测访问日志中的其他安全问题

访问日志揭示的远不止暴力攻击活动。以下日志条目中的模式是其他常见 Web 应用程序攻击的指标:

路径遍历尝试——试图访问 Web 根目录之外的文件

grep "\.\./\.\." ~/logs/domainname.com-access_log | head -20

SQL 注入探测——请求 URL 中出现的关键词

grep -i "union\|select\|from\|where\|drop\|insert\|update\|delete\|cast(" ~/logs/domainname.com-access_log | head -20

敏感文件枚举——扫描暴露的配置文件

grep -E "\.env|config\.php|wp-config\.php|\.git|backup\.zip|database\.sql|phpinfo\.php" ~/logs/domainname.com-access_log

Webshell 上传探测——针对 Shell 执行的 POST 请求

grep -i "\.php.*upload\|upload.*\.php\|POST.*shell\|cmd=\|exec=\|system=" ~/logs/domainname.com-access_log

当您发现上述任何模式时,记录违规 IP 并注意时间戳范围。如果需要提交滥用举报或与主机提供商合作进一步调查,这些信息至关重要。

专业提示:如果您的日志文件已增长到数 GB,避免对整个文件运行裸 grep 命令,因为这会导致 CPU 使用率飙升。改为先用 AWK 按日期预过滤:awk '/09\/Jun\/2026/' access_log | grep "404"——这会在传递给 grep 之前只提取今天的条目,大大减少处理时间和服务器负载。

使用访问日志分析流量模式

除了安全性,访问日志还是优秀的流量情报来源。您可以识别访问量最多的页面、流量高峰时段、大型响应负载和异常数据外流——所有这些都无需安装任何额外的分析软件。

请求最多的前 20 个页面(不含静态资源)

awk '{print $7}' ~/logs/domainname.com-access_log | grep -v "\.jpg\|\.png\|\.css\|\.js\|\.ico\|\.woff" | sort | uniq -c | sort -rn | head -20

按小时统计请求量

awk '{print $4}' ~/logs/domainname.com-access_log | cut -d: -f2 | sort | uniq -c

HTTP 状态码分布

awk '{print $9}' ~/logs/domainname.com-access_log | sort | uniq -c | sort -rn

检测异常大的响应(潜在的数据外泄)

awk '{if($10 > 1000000) print $1, $7, $10}' ~/logs/domainname.com-access_log | sort -k3 -rn | head -10

最后一个命令会显示返回响应超过 1 MB 的请求,并列出来源 IP 和请求 URL。如果一个本应返回小响应的 URL(如登录页面)正在向异常 IP 发送数 MB 的数据,这可能表示发生了未经授权的数据提取。

使用每日 Shell 脚本自动化日志监控

手动运行单个命令对于一次性调查很有用,但设置自动化每日报告可让您快速发现问题,无需记住所有命令。以下脚本汇总了当天日志中的关键安全信号:

#!/bin/bash
LOGFILE="$HOME/logs/domainname.com-access_log"
TODAY=$(date "+%d/%b/%Y")
echo "=== Daily Log Report: $TODAY ==="
echo ""
echo "--- Top 10 IP Addresses ---"
grep "$TODAY" "$LOGFILE" | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
echo ""
echo "--- HTTP Status Code Breakdown ---"
grep "$TODAY" "$LOGFILE" | awk '{print $9}' | sort | uniq -c | sort -rn
echo ""
echo "--- Top 10 URLs Returning 404 ---"
grep "$TODAY" "$LOGFILE" | grep '" 404 ' | awk '{print $7}' | sort | uniq -c | sort -rn | head -10
echo ""
echo "--- Non-Browser User-Agents ---"
grep "$TODAY" "$LOGFILE" | grep -v "Mozilla" | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn | head -10

将此文件保存至 ~/scripts/log-report.sh 并设置为每日 cron 作业:

0 0 * * * /bin/bash ~/scripts/log-report.sh >> ~/logs/daily-report.txt 2>&1

每天早上查阅 ~/logs/daily-report.txt,在异常活动升级之前及时掌握情况。

常见问题解答

访问日志在 DirectAdmin 主机中位于何处?

在 DirectAdmin 中,前往「进阶功能」→「Apache 日志」,或通过文件管理器直接浏览至 ~/logs/ 或 ~/access-logs/ 目录。通常会找到名为 domainname.com-access_log 的文件。如果您的主机方案支持 SSH,也可以直接从命令行访问 /home/username/logs/ 中的日志。

如何从访问日志中区分好机器人和坏机器人?

Googlebot 和 Bingbot 等好机器人会清楚地声明其 User-Agent,遵守您的 robots.txt 规则,并来自可通过反向 DNS 查询验证的 IP 地址。坏机器人通常使用伪造或空白的 User-Agent,快速连续向不存在的路径发送请求,产生异常高的 404 错误率,或来自没有合法商业身份的数据中心 IP 范围。

为什么同一个 IP 地址每天发送数千个请求?

有三个常见原因:1) 漏洞扫描器探测各种路径和参数寻找弱点。2) 针对登录端点(如 /wp-login.php 或 /xmlrpc.php)的暴力攻击,尝试大量用户名和密码组合。3) 僵尸网络 DDoS,部分节点从同一 IP 重复发送请求。缓解措施包括通过 .htaccess 封锁违规 IP、使用 Web 应用程序防火墙,或在有 root 权限时安装 fail2ban。

出于安全目的,访问日志应保留多长时间?

一般最佳做法是至少保留 90 天的访问日志用于安全调查,对于受监管行业的合规需求则保留至 1 年。如果您的主机方案频繁轮换日志,请设置 cron 作业每天将日志压缩并归档到远程位置。当安全事件在发生数周后才被发现时,充足的历史数据对于取证分析至关重要。

AsiaGB DirectAdmin 主机——功能完备

AsiaGB 主机包含 DirectAdmin、PHP 8.3、MySQL 及完整日志访问权限。方案起价 500 泰铢/年。

查看主机方案