获取全套nginx教程,请访问瓦力博客
ngx_http_secure_link_module模块用于检查请求链接的真伪,保护资源免受未经授权的访问,限制链接的生命周期。
通过将请求中传递的校验和值与请求计算的值进行比较来验证请求链接的真实性。如果链接的生命周期有限并且时间已过,则该链接将被视为过时。
该模块提供两种备选操作模式。第一种模式secure_link_secret
指令启用,用于检查请求链接的真实性以及保护资源免受未经授权的访问。第二种模式secure_link
和secure_link_md5
指令启用,也用于限制链接生命周期。
1.配置模块
secure_link
Syntax: secure_link expression;
Default: —
Context: http, server, location
secure_link_md5
Syntax: secure_link_md5 expression;
Default: —
Context: http, server, location
secure_link_secret
Syntax: secure_link_secret word;
Default: —
Context: location
2.验证原理
![9150023-a43da714e4601cdb.jpg](https://upload-images.jianshu.io/upload_images/9150023-a43da714e4601cdb.jpg)
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