Nginx日志格式
代码语言:javascript复制 log_format json '{"@timestamp":"$time_iso8601",'
'"clientip":"$remote_addr",'
'"request":"$request",'
'"http_user_agent":"$http_user_agent",'
'"size":"$body_bytes_sent",'
'"responsetime":"$request_time",'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"domain":"$host",'
'"referer":"$http_referer",'
'"status":"$status"}';
access_log /var/log/nginx/access.log json;
脚本内容
可以根据自己需求在进行改进
代码语言:javascript复制#!/bin/bash
#作者:小胖宇
#博客地址:https://blog.csdn.net/weixin_46152207?spm=1001.2014.3001.5343
#脚本详解:查询出nginx日志中访问量异常的ip进行封禁
#方法有很多可以利用nginx的deny方法,这里采用iptables
#nginx日志位置
nginx_access_log=/var/log/nginx/access.log
ip=/var/log/nginx/ip.txt
#一分钟内ip访问量统计排序
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 > ip.txt
for i in `awk '{print $1}' ip.txt`
do
if [ $i -gt 500 ]; then #设置的阈值为一分钟500
denyip=`grep $i ip.txt | awk '{print $2}'`
iptables -I INPUT -s $denyip -j DROP
echo $denyip > denyip.txt
fi
done
效果
可以用两种方式进行刷一些日志记录 命令行:循环访问制造大量的记录 也就是通过循环的方式使127.0.0.1作为了异常访问的ip
代码语言:javascript复制while true; do curl http://127.0.0.1; done
浏览器:
脚本检测是以一分钟之前最为检测范围 错后一分钟执行脚本即可 或者写入计划性任务
结果127.0.0.1不能在进行访问