防盗链概念
某网站的图片等资源只有指定一些站点或者IP可以访问,不允许其它站点访问。
通过Referer实现图片防盗链
打开nginx.conf
,配置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked server_names test.com;
if ($invalid_referer){
return 403;
#rewrite ^/ https://www.baidu.com/img/bd_logo1.png;
}
expires 30d;
}
下面对这些配置进行解释。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
此行配置的作用是匹配以 gif/jpg/jpeg/png/bmp/swf
结尾的文件请求。
location /image/
另外也可以通过这样的配置来匹配指定目录。
valid_referers none | blocked | server_names | 字符串
此行配置的作用是识别 referer
,即可以正常获取资源文件的白名单域名。
参数说明:
- none 表示请求的
referer
为空,也就是直接访问图片资源。比如在浏览器中直接访问图片http://www.test.com/test.png
时,请求的referer
会为空。 - blocked 表示
referer
的值被代理或者防火墙删除了。 - server_names 表示
referer
来源包含当前的server_names
,即location
的父节点server
节点的server_name
的值。 - 字符串 表示合法域名。比如
test.com
,配置后,来源是test.com
的请求就会被认为是合法的请求。也可以使用正则表达式匹配合法请求来源, 如~\.test\.
。
if ($invalid_referer){
return 403;
#rewrite ^/ https://www.baidu.com/img/bd_logo1.png;
}
如果请求匹配以上的条件, $invalid_referer
变量的值为0;如果不匹配, $invalid_referer
变量的值为1,则会执行 if ($invalid_referer){...}
中的代码块。
return 403;
表示HTTP响应的状态码为 403
,该状态码表示 Forbidden
,即服务器禁止了该请求。
也可以使用 rewrite ^/ https://www.baidu.com/img/bd_logo1.png;
语句。使用该语句表示,当请求不匹配时,将请求重定向到 https://www.baidu.com/img/bd_logo1.png
,响应的HTPP状态码为 302
,该状态码表示 Moved Temporarily
,即临时重定向。
实现效果如下图所示: