Nginx 日志分析与调试技巧
Nginx 刘宇帅 15天前 阅读量: 155
Nginx 作为高性能 Web 服务器,日志系统是它的重要组成部分。通过合理配置与分析访问日志(access log)和错误日志(error log),可以快速定位问题、统计流量、优化配置,甚至监控攻击行为。
本文将详解 Nginx 的日志类型、配置方式、调试技巧和常见分析方法,帮助你用日志驱动系统稳定性和运维效率提升。
目录
一、Nginx 的日志类型
Nginx 主要有两种日志:
- 访问日志(access log):记录每一次客户端请求及响应状态,常用于性能监控、统计分析。
- 错误日志(error log):记录运行时错误,如配置错误、后端超时、服务崩溃等,是排查故障的第一入口。
此外,还有一些模块的内部日志(如 stream、Lua 日志),也会写入 error log 中。
二、访问日志 access.log 配置
默认配置:
access_log /var/log/nginx/access.log;
你可以自定义日志格式,例如:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $request_time';
access_log /var/log/nginx/access.log main;
常用变量说明:
$remote_addr
:客户端 IP$request
:请求行,如GET /api HTTP/1.1
$status
:响应状态码$request_time
:整个请求处理耗时$body_bytes_sent
:返回给客户端的字节数$http_user_agent
:客户端设备和浏览器信息
建议将日志格式统一设为 main
,便于后续分析与统计。
三、错误日志 error.log 配置
默认路径通常为:
error_log /var/log/nginx/error.log error;
日志级别从低到高依次为:
debug
:最详细的调试信息info
:普通运行信息notice
:重要但不影响运行的信息warn
:警告error
:错误信息crit
:严重错误alert
和emerg
:紧急错误,系统级故障
调试时推荐暂时将日志级别调高:
error_log /var/log/nginx/error.log debug;
生产环境建议使用 warn
或 error
,避免日志过大影响性能。
四、常见调试技巧
查看是否命中某条规则
在配置中加入调试输出:
rewrite_by_lua_block {
ngx.log(ngx.ERR, "当前请求 URI: ", ngx.var.request_uri)
}
检查请求是否进入指定 location
你可以给不同 location 加上不同日志格式或 access_log 路径,来判断请求的匹配逻辑:
location /api/ {
access_log /var/log/nginx/api_access.log main;
}
临时关闭 access_log
如果某类请求频繁又不需要记录,可以临时关闭访问日志:
location ~* \.(png|jpg|js|css)$ {
access_log off;
}
显示上游错误信息
在代理请求中,如果后端返回错误,可以增加:
proxy_intercept_errors on;
这样可以捕捉并记录完整后端异常信息。
五、日志分析实战方法
统计访问量最多的 IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
统计请求最多的接口路径
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head
统计响应时间较长的请求
awk '$NF > 1 {print $7, $NF}' access.log | sort -k2 -nr | head
上面示例中 $NF
表示日志行最后一列(通常是 $request_time
),可用于抓慢请求。
筛选错误请求
grep " 500 " access.log
你也可以筛选 404、502 等特定状态码,帮助排查失效接口或后端异常。
六、推荐工具与命令
goaccess:实时日志分析工具
安装并运行:
goaccess -f /var/log/nginx/access.log -o report.html --log-format=COMBINED
生成一份直观的访问报告。
lnav:终端日志浏览器
支持日志高亮、搜索、过滤等功能:
lnav /var/log/nginx/access.log
tail + grep 联合调试
tail -f /var/log/nginx/error.log | grep "timeout"
可以实时跟踪错误信息。
总结
Nginx 的日志系统不仅是排查问题的基础工具,也可以用于性能监控、安全审计和访问分析。通过合理设置日志格式、日志级别,并借助一些命令或工具,就能快速掌握服务运行状态。
建议日常开发和运维中养成“看日志说话”的习惯,让日志成为你的核心调试手段。