[Nginx]用Nginx实现与应用结合的訪问控制 - 防盗链
应用场景:图片等资源须要设置权限。如:仅仅有认证过的用户才干訪问自己的图片。
解决的方法:使用Nginx的防盗链模块http_secure_link能够实现,该模块默认情况下不包括。故在安装时要加上--with-http_secure_link_module
该模块依据两个參数控制权限訪问,一个是过期时间(即该链接在这个时间之前可訪问。过期后无法訪问)。该參数主要出于安全考虑。
还有一个是通过md5算法算出来的KEY,一般通过uri计算
举例:
server {
listen 80;
server_name 192.168.1.22;
root /home/search/upload/portal_upload/user;
location / {
index index.html index.htm;
}
location /img/dossier/ {
secure_link $arg_st,$arg_e;
secure_link_md5 guahao@345$uri$arg_e;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
rewrite ^/img/dossier/(.*)$ /img/dossier/$1 break;
}
}
上面的secure_link定义了控制权限的两个參数(各自是st, e)
当中e就是上述的过期时间,建议e = 当前时间 + 有效期限(5分钟)
比如:
e = date +%s -d "December 22, 2014 12:22:03"
= 1419222123
st的计算公式例如以下:md5(PKEY,uri,e)。当中PKEY是自己定义的常量
比如:
st = php -r 'print str_replace("=", "",strtr(base64_encode(md5("guahao@345/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg1419222123",TRUE)),"+/","-_")) . "\n";'
=13c9kZrZT1qnNgpG4Vtksw
效果例如以下:
http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg --不可訪问
http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg?st=13c9kZrZT1qnNgpG4Vtksw&e=1419222123 --过期前可訪问。过期后不可訪问
http://192.168.1.22/img/headpic/13/13_140x140.jpg --不在dossier以下的图片没有訪问限制
OK,到此为此我们基本实现的基于应用的权限控制,且方法灵活。由于e和st的生成由应用程序来控制,能进行随意的改动和变动,而架构不受影响。
相关文章
- spring基于注解的声明式事务控制
- scala控制流程语句
- Web--CSS控制页面(link与import方式区别)
- 三菱FX系列PLC定位控制应用技术
- UITableView的分割线长短的控制
- 常规控制图的应用
- 计点值控制图
- TCP协议的滑动窗口具体是怎样控制流量的?
- 工业智能网关BL110应用之62:如何实现智能楼宇控制BACnet 接入亚马逊云平台
- 工业智能网关BL110应用之60:如何实现智能楼宇控制BACnet 接入阿里云平台
- 控制音量大小widget
- protues仿真控制舵机
- proteus中仿真arduino利用74hc595控制LED
- Appium自动化如何控制多设备并行执行
- [WCF权限控制]ASP.NET Roles授权[下篇]
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[上篇]
- 【Python】字符串 ④ ( Python 浮点数精度控制 | 控制数字的宽度和精度 )
- Sql Server系列:数据控制语句
- java线程控制、状态同步、volatile、Thread.interupt以及ConcurrentLinkedQueue