今天突然想看下自己的网站的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