防盗链
对于绝大多数网站而言,都会想让自己网站的视频和图片,免被盗用,毕竟视频流量,花的都是白花花银子,为了防止第三方引用链接访问我们的图片或视频等,消耗服务器资源和网络流量,我们可以在服务器上做防盗链限制。
- 实现防盗链的方式有两种:
refer
方式和签名方式
refer方式实现防盗链
工作模块:ngx_http_referer_module
作用变量:$invalid_referer,全局变量
配置域:server, location
配置
server {
listen 80;
······
location ~* \.(gif|jpg|jpeg|png|bmp|swf|webp)$ {
# location /upload/ {
# 资源防盗链(指定目录or指定文件类型)
access_log off;
valid_referers none blocked server_names *.baidu.com 127.0.0.1 localhost ~\.google\. ~\.baidu\. ~\.qq\.;
if ($invalid_referer) {
rewrite ^/ https://baidu.com/img/test.jpg;
}
}
}
# valid_referers:指定资源访问是通过以下几种方式为合法,即域名白名单,去掉则阻止所有非本站请求。
# none:"Referer"来源头部为空的情况,允许缺失的头部访问。
# blocked:"Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头,允许referer没有对应值的请求。
# server_names:"Referer"来源头部包含当前的server_names(当前域名),若referer站点域名与server_name中本机配的域名一样允许访问。
# 若去掉none blocked则通过浏览器也无法访问,防止别人通过右键另存图片地址。
# access_log off:关闭nginx日志功能。
测试
首先建立一个虚拟主机作为盗链机,安装
nginx
(安装过程略)修改
index.html
文件,加入防盗链主机图片
vi /usr/local/nginx/html/index.html
在
<body>
标签中加入图片注意:将图片改为自己的图片,并且这个图片需要在别的可以访问到的地址,如果是在防盗链机上就访问不到这个图片了
<br>daolianpicture</br>
<img src="http://baidu.com/img/test.webp">
访问盗链机
防盗链机修改
nginx
配置
vi /usr/local/nginx/conf/nginx.conf
在server段加入上述配置后,重启
nginx
,访问盗链机,即可看到防盗链已生效,返回了我们自定义的图片
签名方式实现防盗链
前面说过可以把
none
去掉,防止别人通过右键另存图片地址,当然别人也可以通过伪造referer
来进行访问可以通过签名方式从根本上解决防盗链问题
工作模块:第三方模块HttpAccessKeyModule
配置
server {
listen 80;
······
location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
}
# accesskey on | off: 模块开关
# accesskey_hashmethod md5|sha—1: 签名加密方式
# accesskey_arg: GET参数名称
# accesskey_sign: 加密规则
测试
测试同
refer
方式实现防盗链一样,不再多述
评论区