温馨提示×

debian nginx日志权限问题

小樊
47
2026-09-04 10:59:33
栏目: 智能运维

在 Debian 上,Nginx 日志权限问题通常表现为:

  • Nginx 无法写入 access.log / error.log(Permission denied)
  • logrotate 后 Nginx 不写日志
  • 自定义日志目录无权限
  • 多用户 / PHP-FPM 场景权限混乱

下面按最常见原因 + 解决方法说明。


一、Nginx 日志默认情况(Debian)

  • 日志目录:/var/log/nginx/
  • 默认属主:root:adm
  • 默认权限:640
  • Nginx 运行用户:www-data
ls -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,再写日志


二、常见问题 1:自定义日志目录无权限

现象

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;

三、常见问题 2:logrotate 后不写日志

现象

  • 日志被 rotate
  • 新日志文件为空
  • Nginx 不报错但无日志

原因

logrotate 后:

  • 新文件属主变成 root
  • Nginx worker 无法写入

正确 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 adm
  • kill -USR1(重新打开日志)

四、常见问题 3:SELinux / AppArmor(Debian 默认无 SELinux)

Debian 默认是 AppArmor

检查:

aa-status | grep nginx

如被限制:

apt install apparmor-utils
aa-complain /etc/apparmor.d/usr.sbin.nginx

五、常见问题 4:PHP-FPM 写 Nginx 日志

PHP-FPM 不应直接写 Nginx 日志

正确做法:

  • Nginx 日志:nginx 写
  • PHP 日志:php-fpm 写
; 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 相关配置
  • 自定义日志路径

我可以给你精确修复命令

0