[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| access log | n. | /ˈækses lɒɡ/ | 访问日志(记录每个请求) |
| error log | n. | /ˈerə(r) lɒɡ/ | 错误日志(记录出错信息) |
| log_format | n. | /lɒɡ ˈfɔːmæt/ | 日志格式(自定义访问日志每行内容) |
| level | n. | /ˈlevl/ | 级别(错误日志的严重程度) |
| rotate | v. | /rəʊˈteɪt/ | 切割(日志按天归档、压缩、清理) |
Lecture06-Nginx-日志配置
1、本节讲什么
配好 访问日志(access log) 和 错误日志(error log),并会看日志排错——这是运维排查的"眼睛"。学完你能自定义日志格式、按级别记录错误、用 tail 实时看日志。
2、概念速览
Nginx 有两类日志:
| 日志 | 默认位置 | 记什么 |
|---|---|---|
| 访问日志 access_log | /var/log/nginx/access.log | 每个请求:谁、什么时候、访问了啥、返回多少、耗时 |
| 错误日志 error_log | /var/log/nginx/error.log | 出错时:启动失败、配置错误、连接异常等 |
日志格式(log_format):决定访问日志里每行长什么样,可以自定义字段。常用字段:
| 变量 | 含义 | 例子 |
|---|---|---|
$remote_addr | 客户端 IP | 192.168.1.5 |
$time_local | 服务器本地时间 | 17/Oct/2026:10:30:00 +0800 |
$request | 请求行(方法 + 路径 + 协议) | GET /api/flowers HTTP/1.1 |
$status | 响应状态码 | 200 / 404 / 502 |
$body_bytes_sent | 返回给客户端的字节数 | 1024 |
$request_time | 整个请求耗时(秒) | 0.032 |
错误日志级别(从轻到重):debug < info < notice < warn < error < crit < alert < emerg。设为 warn 表示记录 warn 及以上。
3、照着做
① 查看默认日志
sudo tail -f /var/log/nginx/access.log # 实时看访问日志(Ctrl+C 退出)
sudo tail -n 50 /var/log/nginx/error.log # 看最近 50 行错误日志
② 自定义访问日志格式(在 nginx.conf 的 http { } 里)
http {
log_format main '$remote_addr - [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$request_time"';
# 字段:客户端IP - [时间] "请求行" 状态码 字节 "来源页" "浏览器" 耗时
}
③ 配置访问日志路径和格式(在 server 或 location 里)
server {
access_log /var/log/nginx/flower.access.log main; # 自定义路径 + 用 main 格式
error_log /var/log/nginx/flower.error.log warn; # 错误日志,记录 warn 及以上
}
④ 测试、重载、验证
sudo nginx -t
sudo systemctl reload nginx
curl http://localhost/ # 制造一次访问
sudo tail -f /var/log/nginx/flower.access.log # 看到刚才那次请求记录
⑤ 关闭日志(不需要时可省磁盘)
access_log off; # 关闭访问日志
4、常见疑问
- Q:日志写满了 / 磁盘满了怎么办?
A:日志按天切割是运维标配:配
logrotate(Ubuntu 自带 nginx 的切割规则,在/etc/logrotate.d/nginx)自动按天归档、压缩、清理旧的。不用手动清。 - Q:为什么请求报 502/504?
A:看
error.log——502通常是后端没起来/连接失败,504是后端响应超时。对照主题 4 的proxy_pass和后端是否在跑。 - Q:怎么看某个请求走了静态还是后端?
A:看 access.log 的
$request路径 + 后端是否在 error/后端日志出现。静态请求只有 Nginx access.log 有记录,后端没记录。 - Q:日志格式想加字段怎么办?
A:在
log_format里加 Nginx 内置变量(如$http_user_agent浏览器、$request_time耗时)即可,然后 reload。
附:一天速览 & 常见命令速查
配置流程(每次改配置的固定套路):
sudo vim /etc/nginx/nginx.conf # 1. 改配置
sudo nginx -t # 2. 测语法(必须 syntax is ok)
sudo systemctl reload nginx # 3. 重载生效
常用命令速查表:
| 命令 | 作用 |
|---|---|
sudo systemctl status nginx | 查看运行状态 |
sudo systemctl start / stop / restart nginx | 启动 / 停止 / 重启 |
sudo systemctl reload nginx | 重载配置(不中断,推荐) |
sudo systemctl enable nginx | 开机自启 |
sudo nginx -t | 测试配置语法 |
sudo nginx -v | 查看版本 |
ps -ef \| grep nginx | 看主/工作进程 |
sudo tail -f /var/log/nginx/access.log | 实时看访问日志 |
sudo tail -n 50 /var/log/nginx/error.log | 看最近错误日志 |
核心概念一句话回顾:反向代理(替服务器接客)→ 加多台后端 = 负载均衡 → 静态自己给 + 动态转后端 = 动静分离 → 一切靠日志验证。
5、本节验证
- 分清访问日志与错误日志的作用与默认位置 ✅
- 会自定义 log_format 与日志路径 ✅
- 会用 tail 实时查看并排查 502/504 ✅