温馨提示×

nginx日志如何优化

小樊
47
2026-07-07 15:06:23
栏目: 编程语言

nginx 日志优化主要体现在 减少磁盘 I/O、降低日志体积、提高可维护性、避免影响性能。下面从常见场景给你一套实用优化方案。


一、选择合适的日志级别

1️⃣ 关闭不必要的 access 日志

如果不需要访问日志,直接关闭:

access_log off;

适合场景:

  • 静态资源服务器
  • 高并发接口
  • 内部服务

2️⃣ 减少日志级别(error_log)

error_log /var/log/nginx/error.log warn;

级别说明(从上到下越来越详细):

级别 说明
crit 严重错误
error 错误
warn 警告(推荐)
notice 普通
info 信息
debug 调试(性能影响大)

✅ 生产环境建议 warn 或 error


二、精简 access 日志内容

1️⃣ 自定义日志格式(减少字段)

默认日志字段很多,可以精简:

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 后端耗时

✅ 只记录你真正需要的字段


2️⃣ 不记录健康检查 / 静态资源

location /health {
    access_log off;
}
location ~* \.(js|css|png|jpg|gif|ico)$ {
    access_log off;
}

三、日志切分(防止单个文件过大)

1️⃣ 使用 logrotate(推荐)

/etc/logrotate.d/nginx 示例:

/var/log/nginx/*.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        nginx -s reload
    endscript
}

✅ 优点:

  • 自动按天切分
  • 自动压缩
  • 自动清理历史日志

四、缓冲日志(减少磁盘 I/O)✅ 非常重要

1️⃣ 开启 buffer + flush

access_log /var/log/nginx/access.log main buffer=32k flush=5s;

说明:

  • buffer:内存缓冲
  • flush:最多 5 秒写一次磁盘

✅ 高并发场景强烈推荐


五、异步写日志(减少阻塞)

1️⃣ 使用 open_log_file_cache

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

原因:

  • 性能差
  • 可能包含密码、Token

八、高并发场景推荐配置(示例)

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 不安全

十、总结(优化优先级)

✅ 必做

  1. 关闭不必要的 access_log
  2. 精简日志格式
  3. 使用 buffer + flush
  4. 配置 logrotate

✅ 进阶

  • 按业务拆分日志
  • 不记录静态资源
  • 使用 open_log_file_cache

如果你愿意,可以告诉我:

  • 你是 高并发 / API / 静态站 / 网关
  • 单机还是集群
  • 日志是否要接入 ELK / 日志平台

我可以帮你给出 更精确的 nginx 日志配置方案。

0 踩