温馨提示×

nginx日志切割如何配置

小樊
49
2026-09-26 19:41:38
栏目: 编程语言

Nginx 本身不会自动切割日志,通常借助 logrotate 或 自定义脚本 + cron 来实现日志切割。下面给你几种常见、可用的配置方式。


一、使用 logrotate(推荐 ✅)

1. 创建 logrotate 配置

一般 Nginx 日志在 /var/log/nginx/,新建配置文件:

vim /etc/logrotate.d/nginx

内容示例:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 nginx nginx
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

2. 参数说明

  • daily:每天切割
  • rotate 30:保留 30 天
  • compress:压缩旧日志
  • notifempty:空日志不切割
  • kill -USR1:通知 Nginx 重新打开日志文件(关键)

3. 手动测试

logrotate -d /etc/logrotate.d/nginx   # 模拟执行
logrotate -f /etc/logrotate.d/nginx   # 强制执行

二、使用脚本 + crontab(适合自定义)

1. 编写切割脚本

vim /usr/local/bin/nginx_log_cut.sh
#!/bin/bash
LOG_PATH=/var/log/nginx
DATE=$(date -d "yesterday" +%Y%m%d)

mv $LOG_PATH/access.log $LOG_PATH/access.$DATE.log
mv $LOG_PATH/error.log $LOG_PATH/error.$DATE.log

kill -USR1 $(cat /var/run/nginx.pid)

# 可选:删除 30 天前的日志
find $LOG_PATH -name "*.log" -mtime +30 -delete

赋予执行权限:

chmod +x /usr/local/bin/nginx_log_cut.sh

2. 加入 crontab

crontab -e
0 0 * * * /usr/local/bin/nginx_log_cut.sh

三、Nginx 原生方式(不推荐单独用)

Nginx 支持:

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

但必须配合 kill -USR1 或 nginx -s reopen 才能实现日志轮转。


四、常见问题

✅ 切割后日志不写新文件
→ 忘记执行 kill -USR1

✅ 权限错误
→ 确保 Nginx 用户有写权限

✅ Docker 环境
→ 建议在宿主机做 logrotate,或使用 logging 驱动


如果你告诉我:

  • 系统(CentOS / Ubuntu / Docker)
  • Nginx 安装方式(源码 / yum / apt)

我可以给你更精确的配置示例。

0 踩