nginx 日志优化主要体现在 减少磁盘 I/O、降低日志体积、提高可维护性、避免影响性能。下面从常见场景给你一套实用优化方案。
如果不需要访问日志,直接关闭:
access_log off;
适合场景:
error_log /var/log/nginx/error.log warn;
级别说明(从上到下越来越详细):
| 级别 | 说明 |
|---|---|
| crit | 严重错误 |
| error | 错误 |
| warn | 警告(推荐) |
| notice | 普通 |
| info | 信息 |
| debug | 调试(性能影响大) |
✅ 生产环境建议 warn 或 error
默认日志字段很多,可以精简:
http {
log_format main '$remote_addr - $request - $status - $body_bytes_sent';
access_log /var/log/nginx/access.log main;
}
常用字段说明:
| 变量 | 含义 |
|---|---|
| $remote_addr | 客户端 IP |
| $request | 请求方法和 URL |
| $status | HTTP 状态码 |
| $body_bytes_sent | 响应大小 |
| $request_time | 请求耗时 |
| $upstream_response_time | 后端耗时 |
✅ 只记录你真正需要的字段
location /health {
access_log off;
}
location ~* \.(js|css|png|jpg|gif|ico)$ {
access_log off;
}
/etc/logrotate.d/nginx 示例:
/var/log/nginx/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
nginx -s reload
endscript
}
✅ 优点:
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
说明:
✅ 高并发场景强烈推荐
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
作用:
server {
listen 80;
server_name api.example.com;
access_log /var/log/nginx/api_access.log main;
}
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/web_access.log main;
}
✅ 好处:
❌ 不要记录:
$request_body
原因:
http {
log_format main '$remote_addr - $status - $request_time';
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
}
| 误区 | 说明 |
|---|---|
| 开 debug 日志 | 严重影响性能 |
| 记录所有请求 | 磁盘很快爆 |
| 不切分日志 | 文件巨大 |
| 记录 request_body | 不安全 |
✅ 必做
✅ 进阶
如果你愿意,可以告诉我:
我可以帮你给出 更精确的 nginx 日志配置方案。