在 Debian 上,Nginx 日志权限问题通常表现为:
access.log / error.log(Permission denied)下面按最常见原因 + 解决方法说明。
/var/log/nginx/root:adm640www-datals -l /var/log/nginx/
典型输出:
-rw-r----- 1 root adm 12345 Jun 10 10:00 access.log
-rw-r----- 1 root adm 12345 Jun 10 10:00 error.log
✅ Nginx 以 www-data 运行,但能写日志,是因为它启动时是 root,再写日志
Permission denied: /data/logs/nginx/access.log
Nginx worker 进程(www-data)没有写目录权限
mkdir -p /data/logs/nginx
chown -R www-data:www-data /data/logs/nginx
chmod 755 /data/logs/nginx
nginx.conf:
access_log /data/logs/nginx/access.log;
logrotate 后:
root/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 admkill -USR1(重新打开日志)Debian 默认是 AppArmor
检查:
aa-status | grep nginx
如被限制:
apt install apparmor-utils
aa-complain /etc/apparmor.d/usr.sbin.nginx
❌ PHP-FPM 不应直接写 Nginx 日志
正确做法:
; php.ini
error_log = /var/log/php/php-error.log
chown www-data:www-data /var/log/php
/var/log/nginx
├── access.log (root:adm 640)
├── error.log (root:adm 640)
chown www-data:adm /data/logs/nginx
chmod 750 /data/logs/nginx
# 查看 Nginx 用户
ps aux | grep nginx
# 测试配置
nginx -t
# 查看错误
tail -f /var/log/nginx/error.log
# 查看权限
namei -l /var/log/nginx/access.log
如果你能贴出:
nginx.conf 相关配置我可以给你精确修复命令。