网站打开慢先别骂带宽:Nginx访问日志帮你找到真凶


  1. 建站运维 一、先搞懂Nginx日志里都记了啥 我自己站点默认的日志格式是$remote addr $remote user [$time local] "$request" $status $body bytes sent "$http referer" "$http user agent" "$http x forwarded for" $reque
  1. 建站运维

一、先搞懂Nginx日志里都记了啥

我自己站点默认的日志格式是$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $request_time,核心字段就这几个:

  • remote_addr:访问者IP
  • request:请求的URL和方法
  • status:HTTP状态码
  • body_bytes_sent:发送给客户端的字节数
  • http_user_agent:客户端UA,用来识别是浏览器还是爬虫
  • request_time:请求处理时间,单位秒,这个是排查慢请求最关键的字段。

二、几个直接能用的排查命令

我平时排查都是从这几个命令入手,不用装复杂的日志分析工具:

  1. 看访问量最高的IP:是不是有爬虫疯狂爬
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

如果某个IP一秒钟请求几十上百次,那基本就是爬虫或者恶意请求,直接deny掉就行。

  1. 找最慢的请求:看看哪个接口拖慢了整体速度
awk '{print $NF,$7}' /var/log/nginx/access.log | sort -nr | head -20

这里$NF是最后一个字段也就是request_time,按时间倒序排,前几个就是最慢的请求,我之前就是用这个命令找到了一个没加缓存的分类页,一次请求要3秒多,加完缓存整个站速度直接提上来了。

  1. 看最多的404请求:是不是有人在扫漏洞
awk '$9==404 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

如果出现大量wp-login.php、phpmyadmin这类你站点根本不存在的路径,就是有人在扫通用漏洞,直接封IP或者加WAF规则就行。

三、日志排查的小技巧

  • 别等出问题才看日志,平时可以每天凌晨定时切割日志,避免单个日志文件太大打不开;
  • 如果站点用了CDN,记得日志格式里要加http_x_forwarded_for获取真实IP,不然看到的都是CDN节点IP,白排查;
  • request_time超过1秒的请求都值得重点看,正常静态文件请求应该在几十毫秒以内。

网站频繁报502/504?我常用的排查步骤和解决方法

网站改版不注意这些,之前的SEO努力全白费

评 论
请登录后再评论