ngx_http_secure_link_module模块用于检查请求链接的真伪,保护资源免受未经授权的访问,限制链接的生命周期。

通过将请求中传递的校验和值与请求计算的值进行比较来验证请求链接的真实性。如果链接的生命周期有限并且时间已过,则该链接将被视为过时。

该模块提供两种备选操作模式。第一种模式secure_link_secret指令启用,用于检查请求链接的真实性以及保护资源免受未经授权的访问。第二种模式secure_linksecure_link_md5指令启用,也用于限制链接生命周期。

1.配置模块

Syntax:	secure_link expression;
Default: 
Context: http, server, location
Syntax:	secure_link_md5 expression;
Default: 
Context: http, server, location
Syntax:	secure_link_secret word;
Default: 
Context: location

2.验证原理

ssl

用户在客户端点击下载按钮,服务器收到请求后生成一个下载地址返回给客户端。客户端在用这个生成的下载地址去请求资源,此时nginx去做校验,校验链接地址真伪和链接地址是否过期。如果链接地址是真的并且链接地址没有过期,就给客户端返回下载资源。(nginx验证和服务器生成密钥规则要一致,否则不会通过的)

3.配置教程

服务目录

/opt/app
|-code9
   |-md5url.sh
   |-index.html
   |-download
       |-tesla.img
	   
/etc/nginx/conf.d
|-download.conf

md5url.sh

#生成一个测试链接脚本
servername="walidream.com"
download_file="/download/tesla.img"
time_num=$(date -d "2019-1-10 00:00:00" +%s)
secret_num="wali"

res=$(echo -n "${time_num}${download_file} ${secret_num}"|openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =)

echo "http://${servername}${download_file}?md5=${res}&expires=${time_num}"

获取测试链接

sh /opt/app/code9/md5url.sh

输出

http://walidream.com/download/tesla.img?md5=T1gCW3YQNsnWCcJHWWbcPg&expires=154704960

index.html

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>欢迎来到瓦力博客</h1>
</body>
</html>

download.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    
    root /opt/app/code9;

    location / {
        index index.html;
    }
	
    location /download {
        secure_link $arg_md5,$arg_expires;
        secure_link_md5 "$secure_link_expires$uri wali";
	
        if ($secure_link = "") {
            return 403;
        }

        if ($secure_link = "0") {
            return 410;
        }
    }
}	

检测语法并重启

nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

我们在浏览器输入walidream.com会显示欢迎来到瓦力博客,当输入上面测试链接http://walidream.com/download/tesla.img?md5=T1gCW3YQNsnWCcJHWWbcPg&expires=154704960就可以看到tesla.img文件在浏览器下载了。

将后面的时间戳随便改写如expires=15470496011,回车,发现网页变为403

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)