一、前言
为了防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种:
1:水印,品牌宣传,前提是你的带宽,服务器足够
2:防火墙,直接控制,前提是你知道IP来源
3:防盗链策略下面的方法是直接给予404的错误提示
二、Nginx静态资源防盗链设置
该功能属于ngx_http_referer_module模块,其用于阻止对“ Referer”标头字段中具有无效值的请求的站点访问。应当记住,使用适当的“ Referer”字段值来构造请求非常容易,因此,此模块的预期目的不是彻底阻止此类请求,而是阻止常规浏览器发送的大量请求。还应考虑到常规浏览器甚至对于有效请求也可能不会发送“ Referer”字段。
HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,
例如防止未经允许的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链
情况。
指令:referer_hash_bucket_size size;可存在位置:server, location
默认:referer_hash_bucket_size 64;
作用:设置有效引荐来源哈希表的存储桶大小
指令:referer_hash_max_size size;可存在位置:server, location
默认:referer_hash_max_size 2048;
作用:设置size有效引用哈希表的最大值
指令:valid_referers none | blocked | server_names | string ...;可存在位置:server, location
默认:referer_hash_max_size 2048;
none:意思是不存在的Referer头(表示空的,也就是直接访问,比如直接在浏览器打开一个图片)
blocked:意为有referer但是被防火墙或者是代理给去除了
server_names 为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。
作用:该指令会根据referer Header头的内容分配一个值为0或1给变量$invalid_referer。如果referer Header头不符合valid_referers指令设置的有效Referer,变量$invalid_referer将被设置为1.
变量:$invalid_referer
作用:空字符串,如果“ Referer”请求标头字段值被视为有效,则为 “ 1”。
案例
location ~* ^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked www.benet.com benet.com;
if ($invalid_referer) {
return 403;
}
}