Nginx secure_link防盗链模块
来源:互联网 发布:ec6108v9怎么安装软件 编辑:程序博客网 时间:2024/06/05 17:30
Nginx ngx_http_secure_link_module模块能够检查请求链接的权限以及是否过期,多用于下载服务器防盗链。
原理
1)加密串与过期时间作为url中的参数2)nginx服务器接收到了过期时间,也使用过期时间、配置里密钥、文件uri生成加密串3)计算的加密串与url传递的加密串进行对比
开启ngx_http_secure_link_module
./configure --with-http_secure_link_module #编译nginx时加入
该模块提供两种工作模式:
模式一
通过配置 secure_link
,secure_link_md5
,可实现对链接进行权限以及过期检查判断的功能。
secure_link
语法
语法 : secure_link expression;
默认值: 无
配置段:http, server, location说明
expression由校验值
和过期时间
组成,其中校验值将会与secure_link_md5
中的指定参数的MD5哈希值进行对比,如果两个值不一致,$secure_link
变量的值是空(empty),如果两个值一致,则进行过期检查,如果过期了,则$secure_link
变量值是”0”,如果没过期,则为”1”.
如果链接是有时效性的,那么过期时间用时间戳进行设置,在MD5哈希值后面声明,用逗号隔开。如果没有设置过期时间,该链接永久有效。
secure_link_md5
语法
语法 : secure_link_md5 expression;
默认值: 无
配置段:http, server, location说明
expression指定计算md5哈希值的参数,该md5值将会和url中传递的md5值进行对比校验。expression一般包含uri
(如demo.com/s/link uri则为/s/link) 以及 加密 密钥secret
,如果该链接具有时效,则expression需包含$secure_link_expires
,expression还可以加入客户端信息,如访问IP,浏览器版本信息等.
实例
- nginx配置
location /s/ { secure_link $arg_md5,$arg_expires; secure_link_md5 MySecret$arg_expires$uri; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; }}
- 在UNIX系统中 MD5的值可由下面得出
echo -n '2147483647/s/link127.0.0.1 secret' | \ openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =
- 在php中 拼接访问url
$secret = " secret";$uri = "/hls/cctv1.m3u8";$expire = time() + 300;$md5 = base64_encode(md5($expire.$uri.$secret,true));$md5 = strtr($md5, '+/', '-_');$md5 = str_replace('=', '', $md5);$url = "http://demo.com/hls/cctv1.m3u8?md5={$md5}&expires={$expire}";
模式二
通过配置 secure_link_secret
可实现对链接进行权限判断的功能。
secure_link_secret
语法
语法 : secure_link word;
默认值: 无
配置段:http, server, location说明
使用一个加密字符串对访问路径进行鉴权
请求的链接形式如下
/prefix/hash/link
前缀是非斜杠的任意的字符串,哈希值是link与密钥secret的MD5值,link请求的路径
- 实例
location /s/ { secure_link_secret MySecret; if ($secure_link = "") { return 403; } rewrite ^ /helloworld/$secure_link;}location /helloworld/ { return 503;}
如访问
/s/fdb191a547321828363169ca530ee271/hello
将会被重定向到 /helloworld/hello
哈希值的计算方法
md5(link.MySecret)
- Nginx secure_link防盗链模块
- nginx 多组件安装及secure_link配置与文件下载防盗链的使用(JAVA)
- nginx 多组件安装及secure_link配置与文件下载防盗链的使用(JAVA)
- Nginx 自带防盗链模块
- 用accesskey模块实现Nginx服务器深度防盗链
- nginx利用Location,rewrite模块防盗链,禁止访问
- nginx防盗链设置
- nginx防盗链
- nginx防盗链
- nginx防盗链
- nginx 图片防盗链
- nginx配置防盗链
- nginx防盗链配置
- nginx 防盗链心得
- nginx图片防盗链
- nginx防盗链配置
- 【Nginx】图片防盗链
- nginx 防盗链
- 关于小程序在后台换取openid的方法
- Integer包装类比较时“==”和equals()的区别及原因
- JVM 新生代为何需要两个 Survivor 空间?
- c++存储持续性、作用域和链接性
- 字符串右移
- Nginx secure_link防盗链模块
- C++ 获取linux和windows系统的用户名
- Hyperledger Fabric 相关概念
- Linux xargs命令详解
- 一文了解各种卷积结构原理及优劣
- redis 与赞和踩
- 线段树-单点更新-hihoCoder1077
- Maven 项目名称红色感叹号的问题总结
- JAVA企业面试题精选 数据库21-30