如果文件名具有符号字符

时间:2017-07-13 22:24:15

标签: php nginx

这是我用于生成安全链接的PHP代码:

$file = /dl/file.rar;
$uri_prefix = "example.com";
$secret_word = "my_secret";
$time = time()+86400;
$md5 = base64_encode(md5($secret_word.$file.$time, true));
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url= $uri_prefix.$file.'?key='.$md5.'&e='.$time;

我的nginx.conf是:

location ~\.(mkv|zip|MP4|Mp4|mp4|rar)$ {
        secure_link $arg_key,$arg_e;
        secure_link_md5 "my_secret$arg_e";

        if ($secure_link = "") {
                return 403;
        }
        if ($secure_link = 0) {
                return 410;
        }
        limit_rate_after 8m;
        limit_conn conn_limit_per_ip 2;
        limit_req zone=req_limit_per_ip burst=5 nodelay;
        limit_rate 600k;
}

它的工作正常,但如果文件名有()符号字符,则Nginx返回403;为什么? 文件名示例 this.is.file.name.(short-text).rar

1 个答案:

答案 0 :(得分:-2)

根据NGINX社区“如果是邪恶的”,不应该使用。 IF is evil

您可能希望查看lua/OpenResty这类事情。

OpenResty在NGINX之上利用LUA脚本,在许多情况下会填补很多空白。