前言 {#前言}
有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面来介绍在nginx中实现防盗链配置方法:图片防盗链、下载资源等。
配置说明 {#配置说明}
-
格式:
|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
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。
| -
举例
|-------------------|------------------------------------------------------------------------------------------------------------------------------------| |
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。