当您的网站抛出错误或行为异常时,首先要查看的是错误日志。日志是服务器记录的一切出错的证据。DirectAdmin 虚拟主机提供多种类型的日志 — Apache 错误日志、访问日志和 PHP 错误日志 — 每个都提供不同的诊断信息。
DirectAdmin 中可用的日志类型
- Apache 错误日志 — 记录网络服务器错误:权限被拒绝、文件未找到、500 内部服务器错误
- Apache 访问日志 — 记录接收的每个 HTTP 请求,对流量分析和检测异常很有用
- PHP 错误日志 — 特别记录 PHP 级别的错误:您的代码中的警告、致命错误和通知
- FTP 传输日志 — 记录通过 FTP 上传和下载的文件
如何在 DirectAdmin 中查看错误日志
方法 1:通过 DirectAdmin 面板
- 登录到 DirectAdmin
- 转到 高级功能 → 网站摘要 / 统计 / 日志
- 选择您想查看日志的域
- 点击 错误日志 或 访问日志
- DirectAdmin 显示所选日志的最后 20–50 行
方法 2:通过文件管理器
日志文件存储在这些位置(可能因虚拟主机配置而异):
~/logs/yourdomain.com.error.log ~/logs/yourdomain.com.bytes_log ~/logs/yourdomain.com.log (访问日志) ~/logs/php_errorlog
在 DirectAdmin 中打开文件管理器 → 导航到 logs/ → 右键单击文件以查看其内容。
方法 3:通过 SSH(如有权限)
tail -n 100 ~/logs/yourdomain.com.error.log tail -f ~/logs/yourdomain.com.error.log # 实时流式输出
tail -f 命令可实时流式输出日志内容——非常适合在问题发生时进行即时调试。
读取 Apache 错误日志
Apache 错误日志条目遵循以下格式:
[Thu May 16 10:23:45.123456 2026] [core:error] [pid 12345] [client 1.2.3.4:54321] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error.
- 日期/时间 — 错误发生的时间
- [core:error] — Apache 模块及严重级别
- [client IP] — 发出请求的 IP 地址
- 错误信息 — 具体出错原因
常见错误及修复方法
1. 500 内部服务器错误
[error] [client x.x.x.x] SoftException in Application.cpp:360: Script has to be an executable and writable only by its owner.
原因:文件权限设置不正确——PHP 文件应设为 644,而非 777。
修复:文件管理器 → 右键单击文件 → 更改权限 → 设置为 644。
2. 权限被拒绝(Permission Denied)
[error] [client x.x.x.x] (13)Permission denied: /home/user/public_html/.htaccess pcfg_openfile: unable to check htaccess file
原因:.htaccess 或父目录的权限设置有误。
修复:目录权限应为 755,文件权限应为 644。
3. 文件未找到(404)
[error] [client x.x.x.x] File does not exist: /home/user/public_html/wp-login.php
原因:文件缺失、URL 拼写错误,或机器人在扫描 WordPress 入口文件。
修复:若该文件本应存在,请将其还原。若是机器人流量,可考虑通过 .htaccess 进行速率限制或封锁相关 IP。
4. .htaccess 重定向循环
[error] Request exceeded the limit of 10 internal redirects
原因:.htaccess 中的某条 RewriteRule 将请求重定向至与同一规则匹配的 URL,形成无限循环。
修复:添加 RewriteCond 条件守卫,防止目标 URL 再次匹配同一规则。
日志级别及其含义
Apache 根据 RFC 5424 将日志条目分为八个严重级别。了解这些级别有助于您快速筛选出真正需要关注的内容,而无需逐行阅读所有日志:
| 级别 | 含义 | 所需操作 |
|---|---|---|
emerg |
紧急——服务器完全无法运行 | 立即修复 |
alert |
需要立即采取行动 | 立即修复 |
crit |
严重——特定功能出现故障 | 尽快审查 |
error |
请求失败——500、403、权限错误 | 尽快处理 |
warn |
警告——运行中但存在异常 | 记录并监控 |
notice / info / debug |
信息性提示 / 调试输出 | 仅在主动调试时启用 |
DirectAdmin 虚拟主机通常将 LogLevel 设置为 warn 或 error——这对于生产环境来说是合适的,可以避免日志文件被无关信息充满。如果需要更深入的诊断输出,可以临时将以下内容添加到 .htaccess:
LogLevel debug
调试完成后请立即删除该行。调试日志会为每个处理的请求生成条目,在流量较大的站点上可能会迅速占满磁盘配额。
在访问日志中检测机器人和攻击模式
访问日志是发现自动化流量、漏洞扫描和暴力破解尝试的第一道防线。需要注意的警告信号包括:
- 单一 IP 的高请求量 — 例如某个地址每分钟发出超过 1,000 次请求
- 可疑的 User-Agent 字符串 — 例如
python-requests/2.x、curl/7.x或Go-http-client/2.0 - 重复的 URL 模式 — 针对
/wp-admin/、/xmlrpc.php、/.env或/admin/login - 短时间内大量 404 错误 — 漏洞扫描器探测已知路径的典型特征
一旦识别出可疑 IP,可立即通过 .htaccess 进行封锁:
# 封锁单个 IP Deny from 203.0.113.1 # 封锁整个子网 Deny from 203.0.113.0/24
对于自动化速率限制,mod_evasive(在您的主机支持的情况下)可根据请求阈值动态封锁 IP——在面对分布式攻击时比手动封锁更为有效。
小技巧:使用 awk 统计访问日志中各 IP 的请求数:awk '{print $1}' ~/logs/yourdomain.com.log | sort | uniq -c | sort -rn | head -20
此命令会按请求次数排名输出前 20 个 IP 地址。
读取访问日志
访问日志条目采用混合日志格式(Combined Log Format):
1.2.3.4 - - [16/May/2026:10:23:45 +0700] "GET /index.html HTTP/1.1" 200 1234 "https://google.com" "Mozilla/5.0..."
1.2.3.4— 访客的 IP 地址GET /index.html— HTTP 方法及请求的 URL200— 返回的 HTTP 状态码1234— 响应大小(字节)"https://google.com"— 来源页面(访客从何处跳转而来)"Mozilla/5.0..."— 用户代理字符串(浏览器或机器人标识)
访问日志的用途包括:
- 识别发送异常高请求量的 IP(DDoS/机器人)
- 验证搜索引擎爬虫正在访问哪些页面
- 查找频繁出现的 404 和 500 错误
- 分析每个请求的带宽使用情况
使用 grep 过滤日志(SSH)
如果有 SSH 访问权限,可使用 grep 快速筛选特定日志条目:
# 查找所有错误条目 grep "\[error\]" ~/logs/yourdomain.com.error.log # 从访问日志中查找 500 错误 grep " 500 " ~/logs/yourdomain.com.log # 查找来自特定 IP 的所有请求 grep "^1\.2\.3\.4" ~/logs/yourdomain.com.log # 查找今天的 404 错误 grep "16/May/2026" ~/logs/yourdomain.com.log | grep " 404 "
超过 10 MB 的日志文件建议下载到本地后再打开,而不要在文件管理器中直接查看——大文件可能导致浏览器卡死。请使用 Notepad++ 或安装了日志查看器扩展的 VS Code 等文本编辑器进行查看。
启用 PHP 错误日志
PHP 错误日志与 Apache 错误日志是分开的。日志文件位置如下:
~/logs/php_errorlog # 或 php.ini 中设置的路径: error_log = /home/username/logs/php_errorlog
要启用 PHP 错误日志,请将以下内容添加到您的 .htaccess:
php_flag log_errors on php_value error_log /home/username/logs/php_errorlog
日志轮转与日志文件大小管理
对于运行一段时间的主机账户,日志文件会迅速累积——尤其是访问日志,它记录每一个请求。DirectAdmin 在大多数套餐中会自动处理日志轮转,每天或每周对日志进行压缩和归档。归档日志会带有数字后缀:
~/logs/yourdomain.com.error.log (当前) ~/logs/yourdomain.com.error.log.1.gz (昨天) ~/logs/yourdomain.com.error.log.2.gz (前天)
您可以使用 zcat 或 zgrep 直接读取压缩归档日志,无需解压:
# 读取压缩日志 zcat ~/logs/yourdomain.com.error.log.1.gz | tail -100 # 在压缩日志中搜索 zgrep "\[error\]" ~/logs/yourdomain.com.error.log.1.gz
若需释放磁盘空间,可通过文件管理器直接删除旧的 .gz 归档文件。请勿删除当前的 .log 文件(无数字后缀)——Apache 会持续向其写入内容,删除后将导致日志记录停止,直至服务器再次执行日志轮转。
如果日志文件的增长速度超过轮转能力,可考虑将 Apache 的 LogLevel 从 warn 降低为 error,或启用 mod_deflate 对响应进行压缩,从而减少字节日志的体积。
具有完整日志访问的虚拟主机
AsiaGB 虚拟主机通过 DirectAdmin 为每个账户提供错误日志和访问日志的访问权限 — SSD 存储起价 500 元泰铢/年,99% 正常运行时间 SLA。
查看虚拟主机计划