nginx+lua做授权文件防盗链
最近应朋友要求做一个防盗链的加密链接。废不多说,直接上代码。
server {
listen 8885;
location ~* 8514622d/(.+) {
# 定义加密串 xxx-xxx-xxx
set $salt "xxx-xxx-xxx";
rewrite_by_lua '
--定义分钟变量及加密串容错变量
local time_min=os.date("%M")
local time_gt=time_min+1
local time_lt=time_min-1
--ngx.say(ngx.var.arg_key1)
--ngx.say(os.date("%M"))
--ngx.exec("@json")
if ((ngx.time() - tonumber(ngx.var.arg_key2)) < 10) and ((tonumber(ngx.var.arg_key2) - ngx.time()) < 10) then
if ngx.md5(ngx.var.salt..time_min) == ngx.var.arg_key1 then
ngx.exec("@json")
elseif ngx.md5(ngx.var.salt..time_gt) == ngx.var.arg_key1 then
ngx.exec("@json")
elseif ngx.md5(ngx.var.salt..time_lt) == ngx.var.arg_key1 then
ngx.exec("@json")
end
else
ngx.say("out of time limite")
end
';
}
location @json {
root /www/server/8514622d-0f18-46c9-aece-9f4c4e43f256/;
}
实现原理,由加密因子和分钟生成MD5加密串,作为请求参数url参数的KEY1,然后KEY2取ngx.time()这里一是为了校验,而是为了校对,目前是10的误差,也就是目标客户端想获取我们的链接地址,必须要对时,并且时差在十秒以内。
请求结果
我们等20秒后再请求,已经提示不在了。