美文网首页nginx 教程
[深] nginx secure_link_module模块(2

[深] nginx secure_link_module模块(2

作者: 瓦力博客 | 来源:发表于2019-01-22 10:01 被阅读37次

    获取全套nginx教程,请访问瓦力博客

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

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

    该模块提供两种备选操作模式。第一种模式secure_link_secret指令启用,用于检查请求链接的真实性以及保护资源免受未经授权的访问。第二种模式secure_linksecure_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.验证原理

    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 secure_link_module模块(2

        本文链接:https://www.haomeiwen.com/subject/baccjqtx.html