Nginx云服务器怎么实现访问日志分割
时间 : 2025-03-20 15:26:30
编辑 : Jtti
在云服务器中,Nginx 的访问日志默认会写入一个统一的日志文件,如 /var/log/nginx/access.log,但如果网站流量较大,日志文件会迅速增长,不利于管理和分析。因此,定期分割(按天、按小时等)存储日志是常见的优化手段。以下是几种实现 Nginx 访问日志分割的方法:
方法1、推荐使用logrotate自动分割日志
logrotate是Linux内置的日志管理工具,可定期自动归档、压缩和删除旧日志。
配置 logrotate
在 /etc/logrotate.d/nginx 中添加或修改如下内容:
/var/log/nginx/access.log {
daily # 按天分割(可选 hourly、weekly、monthly)
rotate 7 # 保留 7 天的日志
missingok # 忽略不存在的日志文件
notifempty # 空文件不处理
compress # 采用 gzip 压缩日志
delaycompress # 延迟一天再压缩,防止日志仍在写入时被压缩
postrotate
systemctl reload nginx > /dev/null 2>&1 # 重新加载 Nginx,使其使用新的日志文件
endscript
}
手动测试 logrotate
sudo logrotate -f /etc/logrotate.d/nginx
方法2:手动shell脚本定时分割
适用于需要自定义日志格式或定制管理的场景。
创建日志分割脚本
新建脚本 /usr/local/bin/nginx_log_split.sh:
#!/bin/bash
# 定义日志存放目录
LOG_DIR="/var/log/nginx"
DATE=$(date +%Y-%m-%d)
# 备份当前日志
mv $LOG_DIR/access.log $LOG_DIR/access-$DATE.log
# 重新打开日志文件
kill -USR1 $(cat /run/nginx.pid)
kill -USR1 $(cat /run/nginx.pid) 让 Nginx 重新打开日志文件,而不会中断服务。
赋予执行权限
chmod +x /usr/local/bin/nginx_log_split.sh
配置 crontab 定时执行
编辑 crontab:
crontab -e
添加:
0 0 * * * /usr/local/bin/nginx_log_split.sh
表示每天午夜 00:00 运行日志分割。
方法3:Nginx 按天自动分割日志(基于变量)
如果希望直接在 Nginx 中按日期分割日志,可以使用 $time_local 变量。
修改 Nginx 配置
打开 /etc/nginx/nginx.conf 或站点配置文件:
access_log /var/log/nginx/access-$time_iso8601.log;
然而,Nginx 默认不支持动态日志文件路径,因此该方法仅适用于 OpenResty 或特殊编译的 Nginx 版本。
上一篇:香港云服务器怎么进行性能监控
下一篇:盘点新加坡云服务器SSH安全设置有哪些