概念:
    image.png

    作用:
    (1)指定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问
    (2)限制链接生效周期

    配置语法:
    image.png
    Syntax:secure_link expression;
    Default:默认无
    Context:http,server,location

    Syntax:secure_link_md5 expression;
    Default:默认无
    Context:http,server,location

    配置示例:
    image.png
    [root@img_server ~]# vim /etc/nginx/conf.d/dowm_img_safe.conf
    server {
    listen 80;
    server_name img_server;
    root /usr/share/nginx/html/;

    location / {
    secure_link $arg_md5,$arg_expires; #这里配置了2个参数一个是arg_md5,一个是arg_expires
    secure_link_md5 “$secure_link_expires$uri secret_key”; #secret_key为自定义的加密串
    if ($secure_link = “”) {
    return 403; #资源不存在或哈希比对失败
    }
    if ($secure_link = “0”) {
    return 403; #时间戳过期
    }
    if ($request_filename ~ ^.?.(jpg)$){
    add_header Content-Disposition attachment; #不浏览,直接下载
    }
    }

    }

    操作示例:
    image.png
    首先要用nginx -V确认一下有没有这个高级模块,nginx可能默认提前编译这个功能进去,找一下“—with-http_secure_link_module”

    image.png
    因为涉及到md5加密的原因,需要你的环境要具备openssl环境,所以需要先装一下

    image.png
    随后切换至指定目录下

    image.png
    生成一个shell脚本,这个名字要和nginx配置文件中的名字相对应,后续需要注意,这个脚本是为了能够生成md5加密串做准备的

    image.png
    #!/bin/sh
    #
    servername=”10.1.10.131”
    download_file=”/star.jpg”
    time_num=$(date -d “2022-12-31 00:00:00” +%s)
    secret_num=”mjb”

    res=$(echo -n “${timenum}${download_file} ${secret_num}”|openssl md5 -binary | openssl base64 | tr +/ - | tr -d =)

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

    编辑指定内容,地址是我本机的地址,本次测试用的图片也是我一开始就在的图片,我重命名成了“star.jpg”

    image.png
    执行一下,就能产生一串md5值

    image.png
    接下来就是直接编辑配置文件,增加指定的配置语句,这就是大家需要注意的地方,这个“mjb”要和之前创建的md5字符串生成脚本要一致

    image.png
    然后你就可以用指定的,被加密过的下载url去查看图片

    image.png
    尝试修改一下expires值,访问就会失败,效果已经实现

    image.png
    修改md5值,也会失败,到这儿,应该就好理解之前几部的实验配置意义,只有用nginx服务器生成的指定加密下载地址去查看或者下载,才能正常访问