让Nginx HttpSecureLinkModule 403正常工作

时间:2013-06-11 11:16:09

标签: nginx download php

我正在尝试使用破坏的(?)脚本进行视频处理,如果使用直接链接而不是过期链接,我在返回403时遇到问题。

我目前可以获得URL的安全/隐藏,并且有这样的到期时间;     domain.org/media/的 X2lkdmFSZHZ1MU40dmhnM3E0V2lNQQ,1370948784 /flv/38.flv

文件位于/ home / srv / public_html / media / videos / flv

但是,如果您知道正确的路径,则可以直接从URL获取视频文件;     domain.org/media/的 vidoes /flv/38.flv

以下是创建安全链接并为flv文件提供渐进式流式传输的相关代码部分。

$config['nginx_key'] = 'TOPSECRET';
$config['nginx_prefix'] = '/media/';

$file_sd = '/flv/' .$video_id. '.flv';
$time = time()+ 3600;
$md5hash_sd = md5($time . '.' . $file_sd .'.' . $config['nginx_key'], true);
$md5hash_sd = str_replace('=', '', strtr(base64_encode($md5hash_sd), '+/', '-_'));

// return result
$SD_URL = $config['BASE_URL'].$config['nginx_prefix']. $md5hash_sd . ',' .$time .$file_sd;

result; domain.org/media/X2lkdmFSZHZ1MU40dmhnM3E0V2lNQQ,1370948784/hd/38.mp4

这些是nginx规则;

location ~ ^/media/(?<secure>[\w\-=]+,\d+)(?<file>/.*\.flv)$ {
secure_link $secure;
secure_link_md5 $secure_link_expires.$file.TOPSECRET;
if ($secure_link = "") { return 403; }
if ($secure_link = "0") { return 410; }
alias  /home/srv/public_html/media/videos$file;
flv;
}

我的问题是,如果有人试图直接访问flv文件而不是最终到期的安全链接,有人可以在这里看到我如何无法返回403。 403是唯一似乎没有工作的部分。

感谢您的时间。 - D.R

2 个答案:

答案 0 :(得分:2)

location ~ /media/(.+)\.flv$ {
root /srv/www/public_html;
deny all;
}
# use fastcgi for all php files
location ~ \.php$ {
...

这会阻止指向任何.flv文件的直接链接,同时允许脚本正常生成散列网址。

http://www.domain.org/media/Q9nb0mU7vLxkpR55GXehnA,1371541450/flv/37.flv - 好的 http://www.domain.org/media/path/to/flv/37.flv - 拒绝403。

答案 1 :(得分:1)

    location /media/ {
        deny all;
        return 403;
    }

添加此内容。