这是我用于生成安全链接的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
答案 0 :(得分:-2)
根据NGINX社区“如果是邪恶的”,不应该使用。 IF is evil
您可能希望查看lua/OpenResty这类事情。
OpenResty在NGINX之上利用LUA脚本,在许多情况下会填补很多空白。