温馨提示×

nginx日志怎么分析异常

小樊
50
2026-09-29 19:10:58
栏目: 编程语言

分析 Nginx 日志是排查网站异常、性能瓶颈和安全问题的重要手段。下面从日志类型、常见异常、分析方法和实用工具几个方面系统说明。


一、Nginx 常见日志类型

1. 访问日志(access log)

默认路径:

/var/log/nginx/access.log

典型格式(combined):

$remote_addr - $remote_user [$time_local] "$request" 
$status $body_bytes_sent "$http_referer" "$http_user_agent"

2. 错误日志(error log)

默认路径:

/var/log/nginx/error.log

日志级别:

debug < info < notice < warn < error < crit < alert < emerg

二、常见异常及对应日志特征

1. 大量 4xx 错误

  • 404:资源不存在(路径错误、静态资源缺失)
  • 403:权限不足(目录权限、SELinux、autoindex 关闭)
  • 429:限流触发

分析命令:

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

2. 5xx 服务端错误

  • 500:后端代码异常(PHP/Python/Java)
  • 502:后端未响应(PHP-FPM 挂了、 upstream 超时)
  • 503:服务不可用(限流、维护)
  • 504:网关超时(数据库慢、接口卡死)

查看错误日志:

grep "502" /var/log/nginx/error.log

3. 访问量异常(爬虫 / 攻击)

特征:

  • 同一 IP 高频访问
  • User-Agent 异常
  • 请求敏感路径(/wp-admin、/.env)

统计 IP 访问次数:

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

4. 慢请求 / 性能问题

启用响应时间日志:

log_format main '$remote_addr - $request_time - $upstream_response_time';

分析慢请求:

awk '$NF > 2 {print}' access.log

三、常用分析命令(实战)

1. 按状态码统计

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

2. 查看某 IP 的所有请求

grep "1.2.3.4" access.log

3. 查看某一时间段日志

awk '$4 >= "[10/Oct/2024:10:00:00" && $4 <= "[10/Oct/2024:11:00:00"' access.log

4. 统计热门 URL

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

四、可视化 & 高级分析工具

1. GoAccess(实时终端分析)

goaccess access.log -o report.html --log-format=COMBINED

2. ELK / Grafana + Loki

  • 适合大规模日志
  • 可做告警、趋势分析

3. ngxtop(类 top 命令)

ngxtop

五、异常排查思路总结

  1. 先看 error.log(直接原因)
  2. 再看 access.log 状态码
  3. 统计 IP / URL / 时间分布
  4. 结合业务(后端、数据库)
  5. 必要时开启 debug 日志

如果你有具体日志内容或异常现象(比如 502、访问慢、被刷),可以直接贴出来,我可以帮你精准分析。

0 踩