温馨提示×

Debian Nginx日志为何不更新

小樊
34
2026-07-13 10:53:19
栏目: 智能运维

Debian 上 Nginx 日志不更新通常不是 Nginx 本身“坏了”,而是日志被轮转、权限、路径或配置变化导致的。下面按最常见 → 较少见的顺序给你排查清单。


一、最常见原因:日志被 logrotate 轮转后未 reopen

Debian 默认会安装 logrotate,Nginx 日志每天/每周会被轮转。

现象

  • /var/log/nginx/access.log 存在但不再增长
  • 但能看到类似:
    access.log.1
    access.log.2.gz
    

原因

logrotate 把旧日志移走,但 Nginx 仍打开旧文件句柄,不会自动写新文件。

验证

ls -lh /var/log/nginx/

解决

让 Nginx 重新打开日志文件:

sudo nginx -s reopen

或者:

sudo systemctl reload nginx

推荐:logrotate 配置里应该已经有这一句,检查:

cat /etc/logrotate.d/nginx

应包含:

postrotate
    /usr/sbin/nginx -s reopen
endscript

如果没有,补上。


二、日志路径被改了(但你没注意)

检查实际生效的配置

nginx -T | grep -E 'access_log|error_log'

确认日志路径是否还是:

/var/log/nginx/access.log

⚠️ 有时你改了 /etc/nginx/sites-enabled/*,但忘了 reload。


三、Nginx 没有 reload / 配置未生效

sudo nginx -t
sudo systemctl reload nginx

如果配置改了但没 reload,日志不会更新。


四、权限问题(非常常见)

1️⃣ 日志目录权限

ls -ld /var/log/nginx

正常应为:

drwxr-x--- root adm

或 nginx 用户可写。

2️⃣ Nginx 运行用户

ps aux | grep nginx

通常是:

www-data

3️⃣ 日志文件权限

ls -l /var/log/nginx/access.log

如果权限不对:

sudo chown www-data:adm /var/log/nginx/access.log
sudo chmod 640 /var/log/nginx/access.log

五、访问量太少 / 被缓存 / 被拦截

1️⃣ 是否真的有请求?

curl -I http://localhost

或:

tail -f /var/log/nginx/access.log

2️⃣ 是否被前端 / CDN / 防火墙拦截?

  • 只记录后端请求
  • 健康检查被 access_log off

六、access_log 被显式关闭

检查配置中是否有:

access_log off;

或:

access_log /dev/null;

七、systemd 限制了日志写入(少见)

systemctl status nginx
journalctl -u nginx

八、磁盘满了(非常容易忽略)

df -h
df -i

✅ 如果 inode 或磁盘满了,日志会直接停止。


九、快速定位 checklist(推荐)

# 1. 是否有请求
curl http://localhost

# 2. 日志是否真的没更新
tail -f /var/log/nginx/access.log

# 3. 是否路径变了
nginx -T | grep access_log

# 4. 是否 logrotate 问题
nginx -s reopen

# 5. 磁盘是否满
df -h

十、如果你愿意,我可以进一步帮你

你可以直接贴出:

  1. nginx -T | grep -E 'access_log|error_log'
  2. ls -lh /var/log/nginx/
  3. cat /etc/logrotate.d/nginx
  4. 是否使用 Docker / 容器 / 宝塔 / 自建 Nginx

我可以精确告诉你哪一步导致日志不更新

0