划重点:
在需要防盗链的location中配置:
具体到配置文件中,如图:
Referer的原理:
直接访问一个网址时,浏览器的Request header(请求标头)中没有Referer
此时点击页面中的某个链接,跳转打开新页面,这时请求头就会带上Referer,值为跳转前页面的链接
打开网页就会发生多次请求
比如访问某个html网页,页面内会引入一些其它资源,如css、js、image等,这些资源并不是和html页面同时被加载,而是拿到页面文件后,在html的骨架里被再次访问
打开顺序为:
1、先请求此html
2、二次或多次请求此html页面内引入的css、js、image
当再次发起请求的时候,会在请求的Request header请求标头中,加上referer参数,这是http协议规定,由浏览器来遵守执行的规则
注意:referer在第二次访问的时候才有,表示是从哪个页面过来的,第一次访问的时候没有
包括浏览器下载的时候,也会带referer
所以每次看上去虽是直接访问了一个页面,但请求这些被引入的资源文件时,Request header请求标头同样会带上referer
防盗链基本原理:
保存在服务器的资源只能由自己去访问,这个我们称作原始站点。而盗链,是在一台非原始站点的服务器中,通过proxy_pass代理或者html中引用,来内联原始站点资源的行为
要防止资源被盗链,可以通过referer判定这个站点和原始站点是否为同一个站点,如果不是,就判断它为非法请求,说明有网站非法引用了我的资源
配置防盗链:
none, 检测 Referer 头域不存在的情况。
blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。
server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
注意:防盗链不能直接在server下配,可以配置到任意的location下,说明哪个location不让被访问
下面为实际配置案例
1、比如网站中的静态资源不能被盗链,就要配置到匹配静态资源的location中
这样配置,使用非原始站点引用时就打不开了,不仅带referer打不开,直接访问也打不开
2、有时候不一定要全部屏蔽,比如可以在非法引用时打不开,直接访问能打开,在验证referer时增加“none”
3、配置多个合法网址或域名,包含通配符匹配
4、非法引用时,跳转提示页面
5、非法引用时,使用Urlrewrite跳转提示图片