前几天讲了《nginx下载防盗链》,今天继续说下图片防盗链. 他们两个使用的指令不一样,前者使用secure link,而且须要程序配合,可是效果很是好;后者不须要程序配合,根据图片来源来实现,可是只能先限制基本的图片盗用,没法防止图片采集.nginx
nginx模块ngx_http_referer_module一般用于阻挡来源非法的域名请求.咱们应该牢记,假装Referer头部是很是简单的事情,因此这个模块只能用于阻止大部分非法请求.咱们应该记住,有些合法的请求是不会带referer来源头部的,因此有时候不要拒绝来源头部(referer)为空的请求.正则表达式
1
2
3
4
5
6
7
|
location ~* \.(gif|jpg|png|bmp)$ {
valid_referers none blocked *.ttlsa.com server_names ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www.ttlsa.com/403.jpg;
}
}
|
以上全部来至ttlsa.com和域名中包含google和baidu的站点均可以访问到当前站点的图片,若是来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,若是使用下面的rewrite,那么盗链的图片都会显示403.jpg。若是用户直接在浏览器输入你的图片地址,那么图片显示正常,由于它符合none这个规则.express
语法: referer_hash_bucket_size size;
默认值: referer_hash_bucket_size 64;
配置段: server, location
这个指令在nginx 1.0.5中开始出现.
Sets the bucket size for the valid referers hash tables. The details of setting up hash tables are provided in a separate document.浏览器
语法: referer_hash_max_size size;
默认值: referer_hash_max_size 2048;
配置段: server, location
这个指令在nginx 1.0.5中开始出现.
Sets the maximum size of the valid referers hash tables. The details of setting up hash tables are provided in a separate document.服务器
语法: valid_referers none | blocked | server_names | string ...;
默认值: —
配置段: server, location
指定合法的来源'referer', 他决定了内置变量$invalid_referer的值,若是referer头部包含在这个合法网址里面,这个变量被设置为0,不然设置为1.记住,不区分大小写的.ide
none
“Referer” 来源头部为空的状况
blocked
“Referer”来源头部不为空,可是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头.
server_names
“Referer”来源头部包含当前的server_names(当前域名)
arbitrary string
任意字符串,定义服务器名或者可选的URI前缀.主机名可使用*开头或者结尾,在检测来源头部这个过程当中,来源域名中的主机端口将会被忽略掉
regular expression
正则表达式,~表示排除https://或http://开头的字符串.google
图片使用来源头部作防盗链是最合理的. 简单、实用。可是没有办法防采集。若是想作文件的防盗链请参考前面章节讲到的使用secure link文件防盗链文章.spa