基于http-x-forward的nginx并发限制与拦截屏蔽
分类:运用配置
701
网站经常被扫描工具,列表爬虫,导致服务器性能开销很大,有些恶意的刷网站,经常导致服务器负载过高。
因为使用了CDN加速,以前基于IP地址的频率限制,拦截,防火墙拦截都无效了。
必须使用基于http-x-forward这类CDN转发过的原始IP字段做工作才行。
(1)基于日志分析做拦截
因为使用了CDN加速,以前基于IP地址的频率限制,拦截,防火墙拦截都无效了。
必须使用基于http-x-forward这类CDN转发过的原始IP字段做工作才行。
(1)基于日志分析做拦截
filename=/home/public_html/logs/xxxx_`date '+%Y_%m_%d'`_access.log
echo $filename
iplist=`cat $filename |grep -v mytest.php | awk -F '"' '{print $4}' | sort | uniq -c | sort -nr -k1 | awk '{if ($1>30)print $2}'`
echo "" > /usr/local/nginx/conf/block_tmp.conf
for ip in $iplist
do
if [ $ip != "-" -a $ip != "127.0.0.1" ]
then
echo 'if ($http_x_forwarded_for = '$ip'){ return 504; }' >> /usr/local/nginx/conf/block_tmp.conf
fi
done
cat /usr/local/nginx/conf/block_tmp.conf > /usr/local/nginx/conf/block.conf
service nginx reload
#(1.1)日志格式
log_format access '$http_host $remote_addr [$time_local] $request $status $body_bytes_sent $http_referer "$http_user_agent" "$http_x_forwarded_for" $upstream_response_time';
#技术点:
$ip != "-" ,是因为通过DNS让蜘蛛直接解析到服务器,所以http_x_forwarded_for一定是空的,刚好区分出用户与蜘蛛,避免拦截了蜘蛛。
#然后在server中include /usr/local/nginx/conf/block.conf即可。
#http段
limit_req_zone $http_x_forwarded_for zone=req_xf:16m rate=3r/s;
#server段
limit_req zone=req_xf burst=1 nodelay;
#同样,因为通过DNS让蜘蛛直接解析到服务器,http_x_forwarded_for 为空不会受频次限制。
本文由爱思考吧 isres.com 分享,转载请注明出处。
本文网址:https://www.isres.com/peizhi/21.html
热门文章
站长推荐
-
linux运维管理工具,免费版Xshell-7.0.0134p.exe
-
goodsync报错:error locking folder: uploading lock file: cannot open sftp file for write failure的一种原因之一
-
让linux的history记录时间 ip 用户等
-
Centos7minimal安装playwright和firefox、chromium,终于跑起来了
-
Linux Centos7设置时区时间为北京时间
-
打工人最爱的一款免费桌面日历软件desktopcal xdiarys-setup-v3
-
个人电脑免费使用chatgpt3.5的方法(23年9月复测有效,浏览器插件)
-
小巧的磁盘清理工具windirstat 1.1.2.80免安装汉化便携版