温馨提示×

如何定位nginx日志异常

小樊
57
2026-09-07 09:20:36
栏目: 编程语言

定位 Nginx 日志异常,通常可以按下面这套思路从「看日志 → 分类型 → 查配置 → 复现 → 验证」逐步推进。


一、先确认你用的是哪种日志

Nginx 主要有两类日志:

  1. access.log(访问日志)

    • 记录每一次请求
    • 异常表现:大量 4xx / 5xx、请求量突增、来源 IP 异常
  2. error.log(错误日志)

    • 记录 Nginx 自身运行错误
    • 异常表现:connect() failed、upstream timed out、permission denied

路径一般在:

/var/log/nginx/access.log
/var/log/nginx/error.log

二、快速定位异常的第一步:统计异常状态码

1️⃣ 查看 5xx / 4xx 数量

grep " 500 " /var/log/nginx/access.log | wc -l
grep " 404 " /var/log/nginx/access.log | wc -l

2️⃣ 统计状态码分布

awk '{print $9}' access.log | sort | uniq -c | sort -rn

3️⃣ 查看最近异常请求

tail -n 100 access.log | grep -E " 4[0-9]{2} | 5[0-9]{2} "

三、根据异常类型反查原因

✅ 404 异常

可能原因:

  • 路径配置错误
  • root / alias 用错
  • 静态资源缺失

排查:

location /static/ {
    alias /data/static/;
}

✅ 注意:alias 末尾是否带 /


✅ 502 / 504 异常(最常见)

502 Bad Gateway

  • 后端服务挂了
  • upstream 配置错误

504 Gateway Timeout

  • 后端响应慢
  • proxy_timeout 太小

查看 error.log:

grep -E "upstream|timeout|connect" error.log

常见错误:

connect() failed (111: Connection refused)
upstream timed out (110: Connection timed out)

✅ 403 Forbidden

原因:

  • 文件权限不足
  • autoindex 关闭且目录访问
  • selinux / 权限问题

检查:

ls -l /path
ps aux | grep nginx

四、开启 debug 日志(精细定位)

1️⃣ 修改 nginx.conf

error_log /var/log/nginx/error.log debug;

2️⃣ 重载 Nginx

nginx -t
nginx -s reload

⚠️ 生产环境调试完记得改回 error_log warn;


五、用时间线定位“异常爆发点”

awk '{print $4}' access.log | cut -c 2-20 | uniq -c

可快速发现:

  • 某个时间点请求暴涨
  • 爬虫 / 攻击行为

六、结合系统层面一起看

top
df -h
netstat -ant | grep :80 | wc -l

常见隐藏问题:

  • 磁盘写满 → 日志无法写入
  • 文件描述符耗尽
  • 后端连接池打满

七、常见“异常日志”速查表

日志内容 含义
upstream prematurely closed 后端主动断连
no live upstreams upstream 全挂
client intended to send too large body 请求体过大
recv() failed 网络不稳定

八、总结套路(可直接照做)

  1. 看 access.log 状态码
  2. 看 error.log 报错关键字
  3. 对应 location / upstream 配置
  4. 必要时开 debug
  5. 系统资源一起看

如果你愿意,可以把具体异常日志内容或 nginx 配置贴出来,我可以直接帮你精准定位是哪一行配置或哪类问题。

0