Web 日志路径与字段是什么
Web 访问日志逐条记录 HTTP 请求:谁在什么时间、用什么方法、请求了哪个 URI、返回什么状态码、响应体多大。默认位置 Nginx 在 /var/log/nginx/access.log,Apache 在 /var/log/httpd/(RHEL 系)或 /var/log/apache2/(Debian 系)。解析前必须先确认 log_format,字段顺序可能被改过。
基本信息
| 常见路径 | Nginx /var/log/nginx/、Apache /var/log/httpd 或 /var/log/apache2/ |
|---|---|
| 关键字段 | 客户端 IP、时间、方法、URI、状态码、字节数、UA |
| 格式确认 | nginx -T 看 log_format,Apache 看 LogFormat 指令 |
| 容器环境 | 日志在容器内或由采集平台收口,先找采集链路 |
典型使用场景
- 排查 Web 漏洞利用尝试:路径爆破、文件上传、注入特征
- 确认可疑请求是否成功,区分 200 与 4xx/5xx
- 还原下载行为:看 URI 类型与响应字节数
- 结合 UA 判断自动化工具与非浏览器客户端
- 与 WAF、反向代理日志按时间与 URI 交叉定位
- 统计 404 与 403 的数量变化,识别目录爆破的起点时间
常用检索
常用检索
tail -100 /var/log/nginx/access.log # 先看格式样本
nginx -T | grep -A3 log_format # 确认字段定义
awk '$9==200 && $7 ~ /\.(zip|sql|tar\.gz)$/' access.log # 非常规文件下载成功
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head # 来源 IP 排行
zcat /var/log/nginx/access.log.*.gz | grep 'POST /upload' # 跨轮转检索
# 字段位置取决于 log_format,先确认再写 awk,否则整列错位combined 格式逐列读法
| 列 | 含义 | 异常表现 |
|---|---|---|
| $remote_addr | 客户端 IP | 大量陌生网段或统一的代理 IP |
| $time_local | 请求时间(本地时区) | 与系统日志时区不一致导致错位 |
| $request | 方法 + URI + 协议 | 同一 URI 高频枚举或含编码绕过特征 |
| $status | 响应状态码 | 本该 403 的路径出现大量 200 |
| $body_bytes_sent | 响应体字节数 | 下载类请求字节数异常偏大 |
| $http_user_agent | 客户端标识 | 空白、伪造或扫描器特征 |
日志时间使用本地时区,容器内时区可能又与宿主机不同。跨服务对照前先统一时区,否则整条时间线会整体偏移。
经过反向代理后端的 access.log 记录的是代理的 IP,真实客户端 IP 要去代理日志或转发的头部里找,而这类头部可以被伪造。
同一站点按虚拟主机拆成多份 access.log 时,先确认目标域名对应哪个文件再检索,只看一份会得出错误结论。