基于http-x-forward的nginx并发限制与拦截屏蔽

网站经常被扫描工具,列表爬虫,导致服务器性能开销很大,有些恶意的刷网站,经常导致服务器负载过高。
因为使用了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即可。


(2)基于http_x_forwarded_for频率限制

#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 为空不会受频次限制。

猜你喜欢

Stable Diffusion的easynegative插件

Stable Diffusion的easynegative插件

有时候看到很多画图的负向词中会有“easynegative”这个单词,这是一个通用的负面模型,把一些常用的不需要AI画的东西全部集成进来了,除非你的负向词面面俱到,不然这个插件还是很有用的。 这是使...

Linux免密登录配置

本地生成公钥 ssh-keygen -t rsa #按三次回车完成 cat /root/.ssh/id_rsa.pub #看到自己机器的公钥内容 线上 vi /etc/ssh/sshd_config...

如何在python整合包使用pip安装更多依赖

如何在python整合包使用pip安装更多依赖

本次想在GPT-SoVITS-v2-240821整合包中安装一个flask,大致步骤如下 (1)在cmd下切换到 GPT-SoVITS-v2-240821目录中, (2)运行命令 "E:\GPT-S...

简单三步实现Linux下mysql数据库定时备份

Linux下实现mysql数据库定时备份,只需要掌握这简单的三步即可。 1、你必须登录数据库创建一个用于备份的帐号密码,可以给大权限也可以细化。 #创建用户和密码 CREATE USER 'back...

nginx图片不存在时以200状态码返回默认图片

这个场景主要是有些图片可能删除了,会在页面是出现叉叉。 可以通过nginx的404方式,设置返回默认图片,优化用户体验。 location ~ \.(jpg|gif|jpeg|png|txt)$ { ...

基于http-x-forward的nginx并发限制与拦截屏蔽

网站经常被扫描工具,列表爬虫,导致服务器性能开销很大,有些恶意的刷网站,经常导致服务器负载过高。 因为使用了CDN加速,以前基于IP地址的频率限制,拦截,防火墙拦截都无效了。 必须使用基于http-x...

mysql运维日常命令大全

学习不仅需要投入时间和成本,更重要的是通过大量实践来达到精通的境界。在日常工作和学习中,我们需要掌握的技能繁多,因此,首先应该掌握常用技能,再选择一个感兴趣的领域进行深入学习,从而在保证时间效益的同时...