Nginx防盗链根据UA屏蔽恶意User Agent请求(防蜘蛛)
相对于Apache,Nginx占用的系统资源更少,更适合VPS使用。恶意盗链的UserAgent无处不在,博客更换到WordPress没几天,就被SPAM(垃圾留言)盯上,又被暴力破解后台用户名密码。以前介绍过Apache使用.htaccess屏蔽恶意UserAgent,今天来介绍Nginx屏蔽恶意UserAgent请求的方法。
先上规则&注释
#禁用未初始化变量警告 uninitialized_variable_warnoff; #匹配各种baduseragent,返回403错误 if($http_user_agent~*"embeddedwb|NSPlayer|WMFSDK|qunarbot|mj12bot|ahrefsbot|Windows98|MSIE6.0;Windows2000|EasouSpider|Sogouwebspider"){ return403; } #匹配POST方法,给变量iftemp赋值 if($request_method~*"POST"){set$iftempX;} #匹配baduseragent,给变量iftemp赋值;这几个UA主要是发垃圾留言的 if($http_user_agent~*"MSIE6.*NET|MSIE7.*NET|MSIE6.*SV1|MSIE6.0;WindowsNT5.0"){ set$iftemp"${iftemp}Y"; } #如果变量iftemp符合上面两个条件,返回403错误 if($iftemp=XY){return403;}
禁用未初始化变量警告,不然会不停写入警告到错误日志error.log,如下
2014/09/1109:21:11[warn]18649#0:*132usinguninitialized“iftemp”variable,client:220.181.51.209,server:www.wilf.cn,request:“GET/wp-content/themes/dazzling/inc/fonts/glyphicons-halflings-regular.woffHTTP/1.0”,host:“www.wilf.cn”,referrer:“http://www.wilf.cn/” 2014/09/1109:21:11[warn]18649#0:*92usinguninitialized“iftemp”variable,client:66.249.79.55,server:www.wilf.cn,request:“GET/page/14?mod=pad&act=view&id=741HTTP/1.1”,host:“www.wilf.cn”
Nginx规则不支持2个以上的条件判断,绕个路,通过给变量两次赋值来完成2个条件判断。
Nginx规则也是使用正则表达式匹配字符串,分析日志,根据需要自己定制。
检验成果的时候到了
183.60.214.51—[10/Sep/2014:22:16:18+0800]—Bytes:13507—GET/?mod=pad&act=view&id=460HTTP/1.1—403—–—Mozilla/5.0(compatible;EasouSpider;+http://www.easou.com/search/spider.html)—–—– 220.181.125.169—[11/Sep/2014:09:38:15+0800]—Bytes:169—GET/page/51?mod=wap&act=AddCom&inpId=860HTTP/1.1—403—–—Sogouwebspider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)—–—–
EasouSpider和Sogouwebspider,再也不见。