在 Nginx 中,“日志权限”通常涉及 日志文件本身的文件系统权限、Nginx 运行用户是否有权写入,以及 日志轮转(logrotate)时的权限处理。下面按常见场景说明。
ps -ef | grep nginx
通常看到:
master process 以 root 运行worker process 以配置中的用户运行(如 www-data、nginx)Nginx 配置中:
user www-data;
Nginx worker 进程需要:
例如:
/var/log/nginx/ # 目录
/var/log/nginx/access.log
推荐权限:
chown -R root:www-data /var/log/nginx
chmod 0755 /var/log/nginx
chmod 0640 /var/log/nginx/*.log
说明:
07550640(更安全)如果你手动建了日志文件:
touch /var/log/nginx/access.log
chown www-data:www-data /var/log/nginx/access.log
chmod 0640 /var/log/nginx/access.log
否则 Nginx 启动可能报错:
Permission denied
如果是 SELinux 开启的系统:
ls -Z /var/log/nginx
semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?"
restorecon -Rv /var/log/nginx
Nginx 日志一般用 logrotate:
/etc/logrotate.d/nginx
示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
重点:
create 0640 www-data admUSR1 信号让 Nginx 重新打开日志open() "/var/log/nginx/access.log" failed (13: Permission denied)
解决:
user 配置USR1777root,属组为 Nginx 用户组0640如果你能告诉我:
我可以给你更精确的权限配置。