首页/安全/应急响应速查/Web 错误日志定位根因

Web 错误日志定位根因

访问异常先看错误日志:502/504 上游问题、权限拒绝、配置错误都会留下比 access.log 更直白的证据。

应急响应速查安全更新于 2026-10-13

错误日志的价值

Web 服务访问异常应先看错误日志:502 与 504 指向上游连接问题,Permission denied 指向文件与目录权限,配置错误会直接给出指令与行号。相比访问日志,错误日志对根因的表达更直白。

应急时的用法

被利用的组件常常在错误日志里直接现形:PHP 报错栈、模板解析失败、模块加载错误都会留下可定位的线索,因此应急第一步扫 error.log 往往比翻 access.log 更快。

基本信息

常见路径/var/log/nginx/error.log、/www/wwwlogs/*.error.log
关键行connect() failed、Permission denied、upstream timed out
优先级别error、crit、emerg
配对分析与 access.log 同一时间窗对照
关联日志PHP-FPM 与后端应用自身的错误日志
权限要求读取日志通常需 root 或日志组

典型使用场景

  • 定位 502 与 504 等访问异常
  • 确认是否被利用组件漏洞
  • 排查权限与配置导致的故障
  • 与访问日志配合还原攻击时间窗
  • 复盘时说明根因与修复方式

检索错误日志关键行

检索错误日志关键行
tail -n 100 /var/log/nginx/error.log
grep -E 'crit|emerg|connect\(\) failed' /var/log/nginx/error.log | tail -n 30
grep -a '2026/10/01' /var/log/nginx/error.log | tail -n 50
zgrep -ah 'Permission denied' /var/log/nginx/error.log*.gz 2>/dev/null | tail -n 20
ls -la /var/log/nginx/ | head

输出逐列读法

字段含义正常/异常
时间与级别发生时间与严重程度crit 与 emerg 优先处理
错误描述如 connect() failed直接指向连接层问题
上游地址upstream 目标用于确认后端服务是否存活
请求信息相关 URI 与客户端与 access.log 对照定位具体请求
不要只翻 access.log:根因常常只在错误日志里,尤其是组件报错与权限类问题。
只看日志尾部会漏掉故障前的记录:用 grep 按时间窗定位,并检查轮转后的日志与压缩归档,否则会把「没看到」当成「没发生」。

完整取证动作

  • 把当前错误日志复制到证据目录并计算哈希
  • 记录日志文件的最后写入时间与体积
  • 标明采集时刻,说明覆盖的时间范围
  • 把访问日志与错误日志成对归档

与其他日志的配合

  • 访问日志用于确认请求来源与访问路径
  • 后端服务日志用于确认应用层错误与堆栈
  • 系统日志用于确认服务是否被重启或被杀
  • 防火墙与 WAF 记录用于确认请求是否被拦截

排查顺序建议

  • 先按级别筛出 crit 与 emerg
  • 再按时间窗聚焦异常时段
  • 然后与访问日志对照同一时刻的请求
  • 最后确认对应服务进程与配置是否被改动

易错点

  • 只翻 access 不看 error:根因往往只在错误日志里
  • 只看尾部:故障前的时间窗要靠 grep 定位
  • 忽略轮转日志:压缩归档中可能保存着关键时段
  • 不检查后端服务日志:上游问题常在后端日志中体现
  • 把错误日志当唯一依据:需结合进程与配置状态确认

数据来源与参考

  • Nginx 官方文档:error_log 与日志级别
  • 宝塔面板站点日志路径(www/wwwlogs)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌