静态资源防盗链
什么是资源盗链
资源盗链指的是此内容不在自己服务器上,而是通过技术手段,绕过别人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大网站的空间和流量。简而言之就是用别人的东西成就自己的网站。
- 效果演示
我们自己准备一个页面,在页面上引入这两个图片查看效果
从上面的效果,可以看出来,下面的图片地址添加了防止盗链的功能,京东这边我们可以直接使用其图片。
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
。
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/17627494.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步