Nginx防盗链

xxuyuan 2011-03-22

一般的防盗链如下:

location ~ .*\.(gif|jpg|png|swf|flv)$ {
  valid_referers none blocked www.test.com www.demo.net;
  if ($invalid_referer) {
    rewrite ^/ http://www.test.com/404.html;
    #return 404;
  }
}

第一行:gif|jpg|png|swf|flv

表示对gif、jpg、png、swf、flv后缀的文件实行防盗链

第二行:www.test.comwww.demo.net

表示对www.test.comwww.demo.net这2个来路进行判断

if{}里面内容的意思是,如果来路不是指定来路就跳转到错误页面,当然直接返回404也是可以的。

nginx有个模块叫做ngx_http_referer_module,通过这个模块,可以很方便的做防盗链设置。

一般常用的方法是在server或者location段中加入:

valid_referers   none  blocked  www.mydomain.com  mydomain.com;

其中none表示空的来路,也就是直接访问,比如直接在浏览器打开一个图片,blocked表示被防火墙标记过的来路,server_names也就是域名了。

0.5.33以后的版本中,可以用*.mydomain.com来表示所有的二级域名。

一、针对不同的文件类型

location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
  valid_referers none blocked *.mydomain.net mydomain.net;
  if ($invalid_referer) {
    #rewrite ^/ http://www.mydomain.net/403.html;
    return 403;
  }
}

二、针对不同的目录

location /img/ {
  root /data/img/;
  valid_referers none blocked *.mydomain.net mydomain.net;
  if ($invalid_referer) {
    rewrite  ^/  http://www.mydomain.net/images/error.gif
    #return   403;
  }
}

相关推荐