您好,登录后才能下订单哦!
# Nginx访问日志举例分析
## 一、Nginx访问日志概述
Nginx作为当前最流行的Web服务器之一,其访问日志是运维人员和开发人员分析网站行为、排查问题的重要依据。访问日志记录了客户端向Nginx服务器发起的每一个请求的详细信息,通过分析这些数据可以:
1. 了解网站访问情况
2. 发现异常访问行为
3. 优化网站性能
4. 进行安全审计
### 1.1 日志配置格式
在nginx.conf配置文件中,日志格式通过`log_format`指令定义:
```nginx
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
常见变量说明:
- $remote_addr
:客户端IP地址
- $time_local
:访问时间
- $request
:请求方法、URI和协议
- $status
:HTTP状态码
- $body_bytes_sent
:发送给客户端的字节数
一条典型的Nginx访问日志如下:
112.65.12.48 - - [15/Jul/2023:10:12:36 +0800] "GET /article/123 HTTP/1.1" 200 4325 "https://www.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
字段解析:
1. 112.65.12.48
:访问者IP
2. -
:未验证用户标识(显示为-)
3. [15/Jul/2023:10:12:36 +0800]
:北京时间2023年7月15日10:12:36
4. GET /article/123 HTTP/1.1
:请求方法为GET,请求URI
5. 200
:HTTP状态码(成功)
6. 4325
:响应大小4,325字节
7. https://www.example.com/
:来源页面
8. Mozilla/5.0...
:用户浏览器信息
常见HTTP状态码分类:
状态码 | 说明 | 可能原因 |
---|---|---|
200 | 请求成功 | 正常访问 |
301⁄302 | 重定向 | URL变更或跳转 |
404 | 页面不存在 | 错误链接或资源被删除 |
500 | 服务器内部错误 | 后端程序异常 |
503 | 服务不可用 | 服务器过载或维护 |
分析案例:
# 统计各状态码出现次数
cat access.log | awk '{print $9}' | sort | uniq -c | sort -rn
4821 200
125 304
87 404
3 500
# 计算总PV(页面访问量)
wc -l access.log
# 计算UV(独立访客)
awk '{print $1}' access.log | sort | uniq | wc -l
# 按小时统计访问量
awk '{print $4}' access.log | cut -d: -f2 | sort | uniq -c
142 08
356 09
721 10
...
# 统计访问最多的10个URL
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -10
1258 /static/js/main.js
1123 /
876 /products
...
# 查找可能的扫描行为(短时间内大量404)
awk '($9 ~ /404/)' access.log | awk '{print $1}' | sort | uniq -c | sort -nr
45 61.174.51.122
12 183.3.224.34
# 统计单IP请求频率(前20名)
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
1428 112.65.12.48
876 183.45.23.11
...
如果配置了$request_time
:
# 显示处理时间最长的10个请求
awk '{print $NF,$7}' access.log | sort -nr | head -10
3.456 /api/search
2.123 /report/generate
...
# 统计传输数据量最大的请求
awk '{print $10,$7}' access.log | sort -nr | head -5
5242880 /download/package.zip
1048576 /video/demo.mp4
AWK:文本处理神器
# 统计各IP的访问次数
awk '{ip[$1]++} END{for(i in ip) print ip[i],i}' access.log | sort -nr
GoAccess:实时日志分析工具
goaccess access.log -o report.html --log-format=COMBINED
ELK Stack:
Grafana+Loki:
现象:网站突然变慢
分析步骤: 1. 检查异常时间段的请求量
sed -n '/15\/Jul\/2023:14/,/15\/Jul\/2023:15/p' access.log | wc -l
awk '/15\/Jul\/2023:14/{print $7}' access.log | sort | uniq -c | sort -nr
现象:控制台报大量404错误
分析过程:
# 找出所有404请求的资源
grep ' 404 ' access.log | awk '{print $7}' | sort | uniq -c
45 /oldpath/images/logo.png
32 /static/old.js
日志轮转:使用logrotate避免日志过大
/var/log/nginx/*.log {
daily
rotate 30
compress
missingok
notifempty
}
敏感信息过滤:避免记录密码等敏感数据
log_format sanitized '$remote_addr - $request $status';
结构化日志:JSON格式更方便分析
log_format json_analytics escape=json
'{"time":"$time_iso8601",'
'"ip":"$remote_addr",'
'"method":"$request_method",'
'"uri":"$request_uri"}';
通过对Nginx访问日志的系统分析,我们可以:
建议将日志分析工作自动化,并建立定期审计机制。对于高流量网站,应考虑使用专业的日志分析平台处理海量数据。
注:本文所有示例基于Nginx默认日志格式,实际使用时请根据业务需求调整分析命令。 “`
这篇文章共计约2600字,采用Markdown格式编写,包含: 1. 多级标题结构 2. 代码块示例 3. 表格展示 4. 命令行实操片段 5. 分析案例说明 6. 工具推荐和最佳实践
可根据实际需求进一步补充具体案例或扩展特定分析场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。