全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

Nginx日志配置与优化

合理配置和优化 Nginx 日志可兼顾问题排查能力与写入性能。

自定义日志格式

JSON 格式日志

适合 ELK 等日志系统采集:

nginx
log_format json escape=json
    '{"time":"$time_iso8601",'
    '"remote_addr":"$remote_addr",'
    '"request":"$request",'
    '"status":$status,'
    '"body_bytes_sent":$body_bytes_sent,'
    '"request_time":$request_time,'
    '"http_referer":"$http_referer",'
    '"http_user_agent":"$http_user_agent"}';

access_log /var/log/nginx/access.json.log json;

精简格式

减少无用字段,降低磁盘写入:

nginx
log_format minimal '$remote_addr [$time_local] "$request" $status '
                   '$body_bytes_sent $request_time';

access_log /var/log/nginx/access.minimal.log minimal;

日志缓冲优化

缓冲可减少磁盘 I/O:

nginx
access_log /var/log/nginx/access.log main buffer=64k flush=15s;
参数说明
buffer=64k日志缓冲区大小
flush=15s最长 15 秒强制刷盘
gzip=1可选,压缩写入日志

注意事项

  • 缓冲日志在服务器崩溃时会丢失未刷盘数据
  • 高频接口可加大 buffer,低频场景无需缓冲

按站点分离日志

nginx
server {
    listen 80;
    server_name site1.com;
    access_log /var/log/nginx/site1.access.log main;
    error_log /var/log/nginx/site1.error.log warn;
}

server {
    listen 80;
    server_name site2.com;
    access_log /var/log/nginx/site2.access.log main buffer=32k;
}

动态开关日志

运行时调整日志级别,无需重载:

nginx
# 使用变量控制
map $args $log_status {
    ~nolog 0;
    default 1;
}

access_log /var/log/nginx/access.log main if=$log_status;

请求携带 ?nolog 参数时不记录日志。

错误日志分级

nginx
# 全局使用 error 级别
error_log /var/log/nginx/error.log error;

# 特定 server 使用 warn
server {
    error_log /var/log/nginx/site.error.log warn;
}

生产环境建议:

  • 日常:error 级别
  • 排查问题:临时改为 warninfo

日志轮转配置

nginx
/var/log/nginx/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
    endscript
}
参数说明
daily每天轮转
rotate 30保留 30 份
compress压缩旧日志
delaycompress延迟压缩(保留最近一份不压缩)
USR1通知 Nginx 重新打开日志文件

关闭无用日志

健康检查接口不记录:

nginx
location /health {
    access_log off;
    log_not_found off;
    return 200 "ok";
}

关闭 404 错误日志:

text
location ~ \.(ico|png|gif)$ {
    log_not_found off;
    access_log off;
}

要点总结

  • 自定义 log_format 可输出 JSON 格式,便于日志采集分析
  • buffer 和 flush 参数优化日志写入性能
  • 按站点分离日志便于排查和归档
  • 生产环境 error_log 使用 error 级别,排查时临时调低
  • 日志轮转通过 logrotate + USR1 信号实现,避免丢失日志
  • 健康检查、静态资源等接口建议关闭访问日志

📝 发现内容有误?点击此处直接编辑

← 上一篇 Nginx常用命令
下一篇 → Nginx虚拟主机配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库