Nginx之防盗链
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1.盗链的实现原理
客户端向服务器请求资源,服务器只包含网页的文本内容,客户端浏览器在解析文本的过程中发现有图片存在,但是图片的链接指向的是其他服务器,这样形成了盗链行为。
2.防盗链的原理
通过了解HTTP协议中的请求头部的Referer头域中的值是不是自己站点内的URL,就可以实现防盗链。
3.如何防盗链
3.1.下载防盗链
3.1.1.nginx的配置
|
3.1.2.php下载页面
|
3.1.3.测试nginx防盗链
浏览器上打开http://test.yangjianbo.com/down.php点击上面的连接下载
下载地址如下:
http://x1.down.yangjianbo.com/web/nginx-1.4.2.tar.gz?st=LSVzmZllg68AJaBmeK3E8Q&e=1378881984 页面不要刷新,等到5分钟后在下载一次,你会发现点击下载会跳转到403页面。
3.1.4.防盗链的过程
1.用户访问down.php
2.down.php根据secret密钥、过期时间、文件uri生成加密串
3.将加密串与过期时间作为参数跟到文件下载地址的后面
4.nginx下载服务器接收到了过期时间,也使用过期时间、配置里密钥、文件uri生成加密串
5.将用户传进来的加密串与自己生成的加密串进行对比,一致允许下载,不一致403
整个过程实际上很简单,类似于用户密码验证. 尤为注意的一点是一定不要泄露了自己的密钥,否则别人就可以盗链了,除了泄露之外最好能经常更新密钥.
3.1.5.secure link指令
3.1.5.1.secure_link
- 语法: secure_link md5_hash[,expiration_time]
- 默认: none
- 配置段: location
- variables: yes
- 这个指令由uri中的MD5哈希值和过期时间组成. md5哈希必须由base64加密的,过期时间为unix时间.如果不加过期时间,那么这个连接永远都不会过期.
3.1.5.2.secure_link_md5
- 语法: secure_link_md5 secret_token_concatenated_with_protected_uri
- 默认: none
- 配置段: location
- variables: yes
- md5值对比结果,使用上面提供的uri、密钥、过期时间生成md5哈希值.如果它生成的md5哈希值与用户提交过来的哈希值一致,那么这个变量的值为1,否则为0
3.1.6.限制多线程下载
3.1.6.1作用域: server location
if ($http_range)
{
return 405;
}
3.1.6.2.图片防盗链
1.valid_referers指令
用来获取Referer头域中的值。如果Referer头域中没有符合valid_referers指令配置的值,$invalid_referer变量将会被赋值为1.
语法结构:
valid_referers none | blocked | server_names | string ...;
none 检测Referer头域不存在的情况
blocked 检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况下,该头域的值不以http://或者https://开头
server_names 设置一个或多个URL
2.针对不同类型的图片防盗链
|
3.禁止浏览器直接访问图片和下载图片,并设置过期时间
|
4.针对目录的防盗链
|
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |