目录

使用Nginx实现授权下载

使用Nginx实现授权下载有两种方式,一种是nginx自带 --with-http_secure_link_module,另外一种是lua自定义实现。

方法一

1.1 安装

编译时添加此参数 --with-http_secure_link_module

1.2 配置

server {
    listen 80;
    server_name download.test.com;
    root /data/wwwroot;
    access_log logs/download.access.log main;

    location / {
        secure_link $arg_st,$arg_e;
        secure_link_md5 FIJaVSEV23$uri$arg_e;

        if ($secure_link = "") {
            return 403;
        }

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

1.3 使用

# shell脚本示例如下
secret="FIJaVSEV23"     # 见前面secure_link_md5配置
uri="/待下载文件路径"
datetime=$(date -d'1day' +'%Y-%m-%d %H:%M:%S')
etime=$(date +%s -d"${datetime}")
token=$(echo -n "${secret}${uri}${etime}" | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =)

# 下载链接
dlurl="dowload.test.com${uri}?st=${token}&e=${etime}"

方法二

2.1 环境

  • CentOS 7
  • Nginx
    • lua-nginx-module

2.2 配置

  • 授权有效期300秒
  • apk和通用文件下载,使用参数形式认证
  • 通过plist形式安装的ipa不能使用任何参数,参数都固化在uri中
server {
    listen 80;
    server_name download.test.com;
    root /data/wwwroot;
    access_log logs/download.access.log main;

    location / {
        access_by_lua_file lua/download_access.lua;
    }
}

download_access.lua

2.3 使用

# shell示例

key="abc"
ts="1623402947"
sign=$(echo -n '${ts}#test#${key}' | md5sum)

apk和通用下载链接格式: http://download.test.com/xxx.apk?sign=${sign}&ts=${ts}
plist中ipa下载链接格式: http://download.test.com/xxx.ipa/${sign}/${ts}