以下代码需添加到配置文件server段内
屏蔽指定UA爬虫蜘蛛和UA为空
if ($http_user_agent ~* "Scrapy|Go-http-client|Apache-HttpClient|HttpClient|SemrushBot|Webdup|AcoonBot|AhrefsBot|Ezooms|EdisterBot|EC2LinkFinder|jikespider|Purebot|MJ12bot|WangIDSpider|WBSearchBot|Wotbox|xbfMozilla|Yottaa|YandexBot|Jorgee|SWEBot|spbot|TurnitinBot-Agent|mail.RU|perl|Python|Xenu|ZmEu|wget|^$" ){ return 444; }
禁止某个目录执行脚本
【单nginx下有效,如使用了nginx+apache组合,php交给apache处理,需要通过.htaccess进行限制】
- location ~* ^/(uploads|templets|data)/.*.(php|php5)$ {
- return 444;
- }
屏蔽某个IP或IP段
- #屏蔽192.168.5.23这个IP
- deny 192.168.5.23;
- #屏蔽192.168.5.* 这个段
- deny 192.168.5.0/24;
或者
if ( $remote_addr ~* "^(1.2.3.4|2.3.4.5|1.1.1\.)") {
return 444;
}
如果有CDN,可以在站点配置里面添加
if ($http_x_forwarded_for ~* "^(1\.2\.3\.[0-9]{1,3}|4.5.6.7)")
{
return 444;
}
禁止非GET|HEAD|POST方式的抓取
- if ($request_method !~ ^(GET|HEAD|POST)$) {
- return 444;
- }
防止文件被下载
- location ~ \.(zip|rar|sql|bak|gz|7z)$ {
- return 444;
- }
修改nginx配置之前务必做好备份,修改完毕后需要重载一次nginx,否则不会生效。
上面大部分规则返回444状态码而不是403,因为444状态码在nginx中有特殊含义。nginx的444状态是直接由服务器中断连接,不会向客户端再返回任何消息,比返回403更加暴力。
补充关于nginx的正则表达式
~ 区分大小写匹配
~* 不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
^ 匹配的开头
$ 匹配的结尾
. * ?等需要转义
» 本文链接地址:https://blog.mydns.vip/1297.html
最新评论
我的站目前每天120个IP,其中刷的是100个。 不知道为什么升级到4H8G5M的标准服务器还是偶尔会崩,CPU占满,但是内存一般这种时候只占50%左右,这是为什么呢?max_children我也设
麻烦发下检测工具
让我下载