Nginx 安全链接与重写

Nginx 安全链接与重写

我想使用 Nginx 安全链接模型并重写来创建一个安全的 URL。因此,安全链接应如下所示:
http://example.com/media/ZYSwFWTSM8DHh8CNupbbzw/1593525536/videos/tmp/793.mp4

并将其重写为:
http://example.com/media/videos/tmp/793.mp4?md5=ZYSwFWTSM8DHh8CNupbbzw&secure=1593525536

最后打开这个视频链接:
http://example.com/media/videos/tmp/793.mp4

这是我的 Nginx 服务器配置:

location /media {
       rewrite  /videos/([a-zA-Z0-9_\-]*)/([0-9]*)/tmp/(.*)\.mp4$ /media/videos/tmp/$3.mp4?md5=$1&expires=$2;
}
        
location /media/videos {
       secure_link $arg_md5,$arg_expires;
       secure_link_md5 "$secure_link_expires$uri SecretWord";

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

问题是,当我尝试打开这些安全链接时,出现“403 Forbidden”错误:
http://example.com/media/ZYSwFWTSM8DHh8CNupbbzw/1593525536/videos/tmp/793.mp4

尽管这些链接运行良好:
http://example.com/media/videos/tmp/793.mp4?md5=ZYSwFWTSM8DHh8CNupbbzw&secure=1593525536

此外,当我删除 secure_link 模型配置并尝试此链接时:
http://example.com/media/ZYSwFWTSM8DHh8CNupbbzw/1593525536/videos/tmp/793.mp4

视频正常工作。

所以我真的不知道问题是什么,因为重写配置或secure_link_module本身可以工作,但它们不能一起工作。

答案1

尝试这个

location /securemedia {
       rewrite  /securemedia/([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)$ /media/videos/$3?md5=$1&expires=$2;
}
        
location /media/videos {
       secure_link $arg_md5,$arg_expires;
       secure_link_md5 "$secure_link_expires$uri SecretWord";

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

示例网址 http://example.com/securemedia/ZYSwFWTSM8DHh8CNupbbzw/1593525536/videos/tmp/793.mp4

相关内容