nginx 日志权限修改主要涉及日志文件本身的权限和nginx 进程的运行用户两个层面。下面按常见场景说明。
ps aux | grep nginx
通常你会看到类似:
root 1234 ... nginx: master process
www-data 5678 ... nginx: worker process
说明 worker 进程以 www-data 运行(也可能是 nginx、nobody,取决于系统)。
ls -l /var/log/nginx/
常见日志:
access.log
error.log
假设 nginx 运行用户是 www-data:
sudo chown www-data:www-data /var/log/nginx/access.log
sudo chown www-data:www-data /var/log/nginx/error.log
如果是整个目录:
sudo chown -R www-data:www-data /var/log/nginx
sudo chmod 640 /var/log/nginx/access.log
sudo chmod 640 /var/log/nginx/error.log
或更宽松(不推荐生产):
sudo chmod 644 *.log
nginx -V 2>&1 | grep -i user
或查看配置文件:
grep -R "user" /etc/nginx/
通常在 /etc/nginx/nginx.conf:
user www-data;
修改后重启:
sudo systemctl restart nginx
如果日志被 logrotate 切割后权限异常,需要修改:
sudo vi /etc/logrotate.d/nginx
示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload nginx
endscript
}
重点是这一行:
create 0640 www-data www-data
如果是 SELinux 开启的系统:
ls -Z /var/log/nginx/
修复上下文:
sudo semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?"
sudo restorecon -Rv /var/log/nginx
open() "/var/log/nginx/access.log" failed (13: Permission denied)
✅ 解决:
| 文件 | 权限 | 属主 |
|---|---|---|
| access.log | 640 | www-data |
| error.log | 640 | www-data |
| 日志目录 | 750 | www-data |
如果你愿意,可以告诉我:
我可以给你精确到命令级别的方案。