Nginx二进制安装默认不自带logrotate配置,需手动创建/etc/logrotate.d/nginx-custom文件,匹配实际日志路径(如/usr/local/nginx/logs/*.log),设置daily、rotate 30、compress、create 0644 nginx nginx及postrotate发送USR1信号,并确保pid路径、用户权限与nginx.conf一致。

Nginx 二进制安装(即非 apt/yum 包管理方式,而是从官网下载 tar.gz 编译或直接解压运行)默认不自带 logrotate 配置,也不会自动创建 /etc/logrotate.d/nginx。所以你需要手动建立并配置轮转策略,否则日志会持续增长、占满磁盘。
日志路径要先确认清楚
二进制安装的 Nginx 通常把日志放在:
-
/usr/local/nginx/logs/access.log -
/usr/local/nginx/logs/error.log
(具体以你nginx.conf中access_log和error_log指令为准,常见路径还有/opt/nginx/logs/或自定义路径)
建议先查实:
/usr/local/nginx/sbin/nginx -t 2>/dev/null | grep -E "(access_log|error_log)" # 或直接看配置文件 grep -E "^(access_log|error_log)" /usr/local/nginx/conf/nginx.conf
创建专用的 logrotate 配置文件
在 /etc/logrotate.d/ 下新建配置,比如:
sudo nano /etc/logrotate.d/nginx-custom
填入以下内容(按你的实际日志路径调整):
/usr/local/nginx/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0644 nginx nginx
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null || true
fi
endscript
}⚠️ 注意点:
-
create 0644 nginx nginx:权限和用户组需匹配你运行 Nginx 的用户(常用nginx或www-data;用ps aux | grep nginx确认主进程属主) -
nginx.pid路径必须与nginx.conf中pid指令一致(默认是logs/nginx.pid,但二进制安装常需显式指定) - 如果没启用
pid文件,postrotate中的kill -USR1会失败,可改用pkill -f "nginx: master process"(不推荐,不够精准)
测试配置是否生效
运行一次强制轮转,观察行为:
sudo logrotate -f /etc/logrotate.d/nginx-custom
检查:
- 是否生成
access.log.1(或.1.gz) - 原
access.log是否变为空文件 - 新日志是否继续写入(可
tail -f /usr/local/nginx/logs/access.log并刷新网页验证)
确保定时任务正常运行
logrotate 默认通过 /etc/cron.daily/logrotate 每天执行。确认该脚本存在且可执行:
ls -l /etc/cron.daily/logrotate # 应输出类似:-rwxr-xr-x 1 root root ... /etc/cron.daily/logrotate
无需额外操作,只要 cron 服务在运行(systemctl is-active cron),就会每天自动触发。
补充:避免权限问题的小技巧
如果 Nginx 启动用户不是 root,而 logrotate 是 root 执行的,create 指令创建的日志文件可能被 Nginx 因权限不足无法写入。稳妥做法是:
- 把日志目录属组设为
adm或wheel,并加g+rw权限 - 或让 Nginx 主进程以
root启动(worker 进程降权),确保能写入轮转后的新日志
例如:
sudo chown -R nginx:adm /usr/local/nginx/logs sudo chmod -R g+rw /usr/local/nginx/logs
不复杂但容易忽略细节,关键是路径、用户、pid 文件三者对齐。


















