前言

有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面来介绍在nginx中实现防盗链配置方法:图片防盗链、下载资源等。

配置说明

  1. 格式:

    1
    2
    3
    4
    5
    6
    7
    8
    valid_referers none | blocked | server_names | strings ....;

    --none:允许没有http_refer的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。

    --blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以
    “http://” 或 “https://” 开头。允许不是http://开头的,不带协议的请求访问资源。

    --server_names :只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用ip。
  2. 举例

    1
    2
    3
    4
    5
    # 自己域名 如果别的网站使用了你的文件,他的域名没配置在这里,他则无法访问这个文件
    valid_referers none blocked zsyyblog.com;
    if ($invalid_referer) {
    return 404;
    }

防盗链配置

假设网站域名是: zsyyblog.com

编辑nginx.conf,在 zsyyblog.com 区域添加如下内容:

1
2
3
4
5
6
location ~* .(gif|png|jpg|bmp|swf|flv)$ {
valid_referers none blocked zsyyblog.com zsyyblog.com;
if ($invalid_referer) {
return 403;
}
}

以上的例子可以实现扩展名为 gif,png,jpg,bmp,swf,flv的url防止被盗链。如果你需要其它的url防止被盗链,添加相应的后缀即可。

针对图片目录实行防盗链

1
2
3
4
5
6
7
8
location /images/ {
alias /data/images/;
valid_referers none blocked *.mynginx.com;
if ($invalid_referer) {
rewrite ^/ http://zsyyblog.com;
#return 403;
}
}

编辑完成之后,重新启动nginx以便配置生效。

小提示:nginx中 location ~location ~*的区别:
location ~* 不区分大小写,location ~ 区分大小写。

需要注意的是,这二段防盗链的配置要放在正确的server里,也就是要放在图片url所在的server_name里。其次,rewrite也要写正确,否则可能造成重复rewrite,可以用firefox的插件Firebug来查看。如果不想重写到某个url,可以直接返回403。