在 Debian 上 Nginx 日志权限“错”(常见表现为:日志文件属主/属组不对、权限过松或过紧、Nginx 无法写日志、logrotate 后权限异常等),通常由下面几类原因导致。
Debian 中 Nginx 默认以 www-data 用户运行:
ps aux | grep nginx
配置在:
user www-data;
如果日志文件属主不是 www-data,就会写不进去。
✅ 正确示例:
/var/log/nginx/access.log www-data www-data 644
❌ 错误示例:
root root 600
Nginx 不只写文件,还需要目录写权限:
/var/log/nginx/
正确权限通常是:
drwxr-x--- www-data adm
如果目录属主是 root,而 Nginx 是 www-data,就会失败。
例如你改成了:
access_log /data/logs/nginx/access.log;
但:
/data/logs/nginx 不存在Debian 的 logrotate 配置:
/etc/logrotate.d/nginx
常见内容:
create 0640 www-data adm
如果:
就会出现:
✅ 解决:
systemctl reload nginx
很多人会:
touch /var/log/nginx/xxx.log
但用 root 创建 → 属主 root
✅ 正确方式:
touch /var/log/nginx/xxx.log
chown www-data:adm /var/log/nginx/xxx.log
如果启用了:
ProtectSystem=full
PrivateTmp=true
可能导致:
# 看 nginx 用户
grep '^user' /etc/nginx/nginx.conf
# 看日志权限
ls -l /var/log/nginx/
# 看报错
journalctl -u nginx
tail -n 50 /var/log/nginx/error.log
# 看 logrotate
cat /etc/logrotate.d/nginx
/var/log/nginx 755 root root
/var/log/nginx/*.log 640 www-data adm
如果你能贴出:
permission denied?)ls -l /var/log/nginx我可以精准告诉你 是哪一条导致的权限错。