您所在的位置:首页 - 服务器 - 正文服务器

通过nginx日志分析IP、PV、UV并封禁可疑IP详解

勇康博客网 勇康博客网 04-04 【服务器】 1071人已围观

摘要今天突然想看下自己的网站的ip访问量,本来以为阿里云控制台有可视化界面,可是没有找到,因此,采用了nginx服务日志生成,通过访问日志可以初步诊断你的网站有没有被DDOS攻击,或者查看你的日均访问量。当然,如果你是一名开发人员,完全可以用代码实现可视化展示,一劳永逸.....参数统一说明awk '{ print $1}':取数据的第1域(第1列)。sort:对获取到的列部分(IP部分)进行排序。uniq -c:打印每一重复行出现的次数。(并

今天突然想看下自己的网站的ip访问量,本来以为阿里云控制台有可视化界面,可是没有找到,因此,采用了nginx服务日志生成,通过访问日志可以初步诊断你的网站有没有被DDOS攻击,或者查看你的日均访问量。当然,如果你是一名开发人员,完全可以用代码实现可视化展示,一劳永逸.....

参数统一说明

  • awk '{ print $1}':取数据的第1域(第1列)。

  • sort:对获取到的列部分(IP部分)进行排序。

  • uniq -c:打印每一重复行出现的次数。(并去掉重复行)

  • sort -nr -k1:按照重复行出现的次序倒序排列(不加r为正序排列),-k1以第一列为标准排序。

  • head -n 10,表示取排在前10位的IP 。

查找服务器所有访问者ip方法

awk '{print $1}' /usr/local/nginx/log/access.log |sort |uniq -c|sort -n

得到如下结果,前面是ip的访问次数,后面是ip,很明显我们需要把访问次数多的ip并且不是蜘蛛的ip屏蔽掉,如下面结果, 
若 66.249.79.84 不为蜘蛛则需要屏蔽:

     89 106.75.133.167
     90 118.123.114.57
     91 101.78.0.210
     92 116.113.124.59
     92 119.90.24.73
     92 124.119.87.204
     119 173.242.117.145
     4320 66.249.79.84

打印到文件:也可以用如下命令,将日志结果以文件形式生成

  • > 覆盖(没有文件则生成新文件);

  • >>追加;

  • 2>&1 表示不仅命令行正常的输出保存到test.log中,产生错误信息的输出也保存到test.log文件中;

awk '{print $1}' /usr/local/nginx/log/access.log |sort |uniq -c|sort -n > test.log 2>&1

屏蔽IP的方法

在nginx的配置目录下面,新建屏蔽ip文件,命名为guolv_ip.conf,以后新增加屏蔽ip只需编辑这个文件即可。 
加入如下内容并保存:

deny 66.249.79.84;

如果配置有问题就需要检查下哪儿有语法问题,如果没有问题,需要执行下面命令,重载 nginx 配置文件

service nginx  reload

注意

屏蔽ip的配置文件既可以屏蔽单个ip,也可以屏蔽ip段,或者只允许某个ip或者某个ip段访问

//屏蔽单个ip访问
 
deny IP; 
 
//允许单个ip访问
 
allow IP; 
 
//屏蔽所有ip访问
 
deny all; 
 
//允许所有ip访问
 
allow all; 
 
//屏蔽整个段即从123.0.0.1到123.255.255.254访问的命令
 
deny 123.0.0.0/8
 
//屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令
 
deny 124.45.0.0/16
 
//屏蔽IP段即从123.45.6.1到123.45.6.254访问的命令
 
deny 123.45.6.0/24
 
//如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
//那需要你在guolv_ip.conf中这样写
 
allow 1.1.1.1; 
allow 1.1.1.2;
deny all;

更多技巧

筛选某天的访问ip

注意日期格式:2021-03-23,这个要看具体access.log日志日期格式,有的是04/Mar/2022 这种格式来体现日期,根据自身情况填写

cat access.log | grep '2021-03-23' | awk '{print $1}'  | sort | uniq -c | sort -nr -k1 | head -n 10

sed命令打印出某个时间段之间的

sed -n '/2021-03-23T10:40:00/,/2021-03-23T10:50:10/p' access.log | awk '{print $1}'  | sort | uniq -c | sort -nr -k1 | head -n 10

多少分钟前的ip访问次数排序

sed -n "/`date -d "1 minute ago" +"%Y-%m-%dT%H:%M:%S"`/,/`date  +"%Y-%m-%dT%H:%M:%S"`/p" access.log | awk -F '"' '{ print $8 }'  | sort | uniq -c | sort -nr -k1 | head -n 10


cat /var/log/nginx/access.log | grep `date -d "1 minutes ago" +"%Y-%m-%d"T"%H:%M"`|awk -F '"' '{ print $8 }'  |sort |uniq -c |sort -rn |  head -n 10

根据访问IP统计UV

awk '{print $1}'  access.log|sort | uniq -c |wc -l

统计访问URL统计PV

awk '{print $7}' access.log|wc -l

查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

根据时间段统计查看日志

 cat  access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|more


Tags: nginx linux 常用工具 服务器 日志

打赏!

分享到:

文章评论 (暂无评论,1071人围观)

我的名片

网名:勇康博客网

职业:攻城狮

现居:广东深圳

Email:909199238@qq.com

站长寄语:穷且益坚,不坠青云之志

  • 我的微信
icp赣ICP备2021004727号-2 icp粤公网安备 44030902003287号
取消
微信二维码
微信二维码
支付宝二维码
关注微信公众号 关注微信公众号
132-4242-5235
7*24小时客服电话