静态资源防盗链

什么是资源盗链

资源盗链指的是此内容不在自己服务器上,而是通过技术手段,绕过别人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大网站的空间和流量。简而言之就是用别人的东西成就自己的网站。

  • 效果演示

我们自己准备一个页面,在页面上引入这两个图片查看效果

从上面的效果,可以看出来,下面的图片地址添加了防止盗链的功能,京东这边我们可以直接使用其图片。

Nginx防盗链的实现原理

当浏览器向web服务器发送请求的时候,一般都会带上Referer,来告诉浏览器该网页是从哪个页面链接过来的。

后台服务器可以根据获取到的这个Referer信息来判断是否为自己信任的网站地址,如果是则放行继续访问,如果不是则可以返回403(服务端拒绝访问)的状态信息。

在本地模拟上述的服务器效果:

Nginx防盗链的具体实现

valid_referers指令

valid_referers:nginx会通过查看referer自动和valid_referers后面的内容进行匹配,如果匹配到了就将$invalid_referer变量置0,如果没有匹配到,则将\$invalid_referer变量置为1,匹配的过程中不区分大小写。

  • 语法:

valid_referers none | blocked | server_names | string...

  • 默认值:

  • 位置:

server、location

属性 说明
none 如果Header中的Referer为空,允许访问
blocked 在Header中的Referer不为空,但是该值被防火墙或代理进行伪装过,如不带"http://" "https://"等协议头的资源允许访问
server_name 指定具体的域名或者IP
string 可以支持正则表达式和*的字符串。如果是正则表达式,需要以~开头表示
location ~*\.(png|jpg|gif){
valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;
if ($invalid_referer){
return 403;
}
root /usr/local/nginx/html;
}

针对目录进行防盗链

遇到的问题:图片有很多,该如何批量进行防盗链?

配置如下:

location /images {
valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;
if ($invalid_referer){
return 403;
}
root /usr/local/nginx/html;
}

这样我们可以对一个目录下的所有资源进行翻到了操作。

遇到的问题:Referer的限制比较粗,比如随意加一个Referer,上面的方式是无法进行限制的。那么这个问题改如何解决?需要用到Nginx的第三方模块ngx_http_accesskey_module

posted @   Lz_蚂蚱  阅读(34)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起