nginx 针对一类特定referer 屏蔽,可能对某些攻击有效

一个客户服务最近受到攻击,通过查看nginx的log发现规律是 referer地址来自相同的字符串
于是乎用下面的屏蔽代码

if ($http_referer ~* "来源字串里面包含的特定字串"){return 403;}

下面是一些资料  详细英文的解释在 http://wiki.nginx.org/HttpCoreModule#location

~ 匹配,区分大小写
~* 不区分大小写的匹配
!~ 不匹配
!~* 不匹配
^~ 常用于location 语法中,后边是一个字符串。它的意思是,在这个字符串匹配后停止进行正则表达式的匹配。
如: location ^~ /images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~* \.(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg匹配到location ~* \.(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。
= 表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。
@ 表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。

参考资料来源

http://hi.baidu.com/jidongxx/item/de0f7e519980eeddd48bac38
http://ourlinux.blog.51cto.com/274624/850470

QQ截图20130418090527

 

另外 参见 /?p=198

发表评论

电子邮件地址不会被公开。 必填项已用*标注