Nginx 的访问日志(通常是 access.log)记录了每一次 HTTP 请求的详细信息。要看明白它,关键搞清楚 日志格式 和 每一段的含义。
常见位置:
/var/log/nginx/access.log/usr/local/nginx/logs/access.log查看命令:
tail -f /var/log/nginx/access.log
Nginx 默认使用 combined 格式,一行日志大概长这样:
192.168.1.10 - - [10/Apr/2024:14:32:01 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 ..."
逐个解释:
| 内容 | 含义 |
|---|---|
192.168.1.10 |
客户端 IP |
- |
远程日志名(一般为空) |
- |
认证用户(无登录为空) |
[10/Apr/2024:14:32:01 +0800] |
请求时间(时区) |
"GET /index.html HTTP/1.1" |
请求方法、路径、协议 |
200 |
HTTP 状态码 |
612 |
响应字节数 |
"-" |
Referer(来源页,直接访问为 -) |
"Mozilla/5.0 ..." |
User-Agent(浏览器/客户端) |
200:正常301 / 302:重定向304:缓存未变400:请求错误401:未授权403:禁止访问404:找不到页面500:服务器内部错误502:网关错误(后端挂了)504:网关超时你可以在 nginx.conf 里改:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
常用变量:
$request_time:请求总耗时$upstream_response_time:后端响应时间$host:访问域名查看访问最多的 IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
查看 404 请求:
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -nr
查看慢请求(假设有 $request_time):
awk '$NF > 1 {print}' access.log
先盯三件事:
如果你愿意,可以把一段看不懂的 真实日志贴出来,我帮你逐字解释。