Nginx 日志写入失败通常由权限、路径、磁盘或配置问题导致。下面按常见原因逐一说明,并给出排查方法。
Nginx 工作进程(通常是 www-data、nginx 用户)没有写权限。
排查:
ps -ef | grep nginx
ls -ld /var/log/nginx
ls -l /var/log/nginx/access.log
解决:
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
配置中写了日志路径,但目录未创建。
示例错误:
open() "/data/logs/nginx/access.log" failed (2: No such file or directory)
解决:
mkdir -p /data/logs/nginx
chown nginx:nginx /data/logs/nginx
日志写不进去。
排查:
df -h
解决:
磁盘没满,但 inode 用光(小文件太多)。
排查:
df -i
即使权限正确也被拒绝。
排查:
getenforce
tail /var/log/audit/audit.log
解决:
setsebool -P httpd_can_network_connect 1
semanage fcontext -a -t httpd_log_t "/data/logs/nginx(/.*)?"
restorecon -Rv /data/logs/nginx
error_log / access_log 路径写错http、server、location 层级冲突检查配置:
nginx -t
日志文件被 rm,但 Nginx 仍持有文件句柄。
表现:
解决:
lsof | grep deleted
# 重启 nginx
nginx -s reload
解决:
docker run -v /host/logs:/var/log/nginx ...
并确保宿主目录可写。
nginx -t
df -h
df -i
ls -ld /var/log/nginx
ps -ef | grep nginx
tail -n 50 /var/log/messages # 或 audit.log
| 报错信息 | 原因 |
|---|---|
| Permission denied | 权限问题 |
| No such file or directory | 目录不存在 |
| No space left on device | 磁盘满 |
| Too many open files | 文件句柄限制 |
如果你能提供:
我可以帮你精准定位是哪一条原因。