Nginx 日志出现权限错误(常见如 Permission denied、failed to open log file、unable to open log、cannot open log file 等),通常不是 Nginx 本身坏了,而是文件/目录权限或属主不对。下面按「常见原因 → 排查 → 解决」来说明。
日志文件或目录属主不对
nginx 或 www-data 用户运行root 创建,worker 无写权限日志目录不存在
/var/log/nginx/xxx/ 没建SELinux / AppArmor 限制(CentOS / RHEL 常见)
磁盘满了或 inode 用完
No space left on devicelogrotate 后权限被改
journalctl -u nginx -n 50
# 或
tail -n 50 /var/log/nginx/error.log
典型错误:
open() "/var/log/nginx/access.log" failed (13: Permission denied)
ps -ef | grep nginx
或
grep user /etc/nginx/nginx.conf
常见:
nginxwww-datals -l /var/log/nginx/
ls -ld /var/log/nginx
正确示例:
drwxr-xr-x nginx nginx /var/log/nginx
-rw-r--r-- nginx nginx access.log
chown -R nginx:nginx /var/log/nginx
# Ubuntu 用 www-data
chown -R www-data:www-data /var/log/nginx
确保可写:
chmod 755 /var/log/nginx
chmod 644 /var/log/nginx/*.log
mkdir -p /var/log/nginx
chown nginx:nginx /var/log/nginx
查看:
getenforce
如果是 Enforcing:
semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?"
restorecon -Rv /var/log/nginx
或临时验证:
setenforce 0
df -h
df -i
清理日志:
truncate -s 0 /var/log/nginx/access.log
编辑:
vim /etc/logrotate.d/nginx
确保有:
create 0644 nginx nginx
或
su nginx nginx
user nginx;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
/var/log/nginx 755 nginx:nginx
*.log 644 nginx:nginx
你可以把具体报错信息 + 系统版本(CentOS / Ubuntu)+ nginx.conf 日志相关配置发出来,我可以直接帮你精准改。