CDN中运用OpenResty做有效访问时间校验

Posted 可道技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CDN中运用OpenResty做有效访问时间校验相关的知识,希望对你有一定的参考价值。

 
   
   
 
点击上方"可道技术"关注,更多技术内容

需求说明

需要对URL参数中的timestamp字段的值做时间校验,例如半个小时内允许访问,超过指定时长禁止访问。
需要实现一个开关,配置是否开启校验,以及校验的时间长度需要配置。

解决方案—— OpenResty

使用OR来实现。
* 在init阶段实现配置装载
* 在access阶段做校验

1.nginx.conf的http段配置添加

lua_code_cache on;
lua_shared_dict config 1m;
init_by_lua_file '/xxx/init_auth.lua';

2./xxx/init_auth.lua内容

local m3_in_time = "on";
local m3_in_ex_time = 7200;

local config = ngx.shared.config;
config:set("m3_in_time",m3_in_time);
config:set("m3_in_ex_time",m3_in_ex_time);

m3_in_time 配置on/off 开关次功能;
m3_in_ex_time 配置的校验有效时间长度,单位为秒,7200为两个小时;

3.在server配置的access位置配置内容

access_by_lua_file "/xxx/auth_timestamp.lua";


4./xxx/auth_timestamp.lua内容

require 'os'

--format time
function gettime(atime)
   local ay = string.sub(atime,1,4);
   local amon = string.sub(atime,5,6);
   local ad = string.sub(atime,7,8);
   local ah = string.sub(atime,9,10);
   local amin = string.sub(atime,11,12);
   local as = string.sub(atime,13,14);
   return os.time({year=ay,month=amon,day=ad,hour=ah,min=amin,sec=as});
end

function time_auth(args,extime)
   local timestamp = (string.match(args,".*timestamp=([^&]*)"));
   local timestamp_n = gettime(timestamp);
   local lasttime = (tonumber(timestamp_n)+extime)
   local nowtime=os.date("%s");
   if timestamp  == nil then
       ngx.exit(ngx.HTTP_FORBIDDEN);
   end
   if string.len(timestamp) ~= 14 then
       ngx.exit(ngx.HTTP_FORBIDDEN);
   end
   if tonumber(nowtime) > lasttime then
       ngx.exit(ngx.HTTP_FORBIDDEN);
   end
end

-- config
local config = ngx.shared.config;
local m3_in_time=config:get("m3_in_time");
local m3_in_ex_time=config:get("m3_in_ex_time");

-- get uri
local url = ngx.var.uri;
local args = ngx.var.args;
if args ~= nil then
url = url.."?"..args
else
ngx.exit(ngx.HTTP_FORBIDDEN);
end

-- index.m3u8
if m3_in_time == "on" then
   local res_in = string.find(url,"/index.m3u8");
   if res_in ~= nil then
--ngx.log(ngx.ERR, "m3_in_time: on!");
time_auth(args,m3_in_ex_time);
   end
--else
   --ngx.log(ngx.ERR, "index.m3u8: both off!");
end


(全文完)

移动端项目开发(微信/ios/安卓);

网站项目开发(美工设计/前端/后端);

运维服务(CDN建设、运维技术服务)。

广州可道技术 我们的公众号号:cnkedao

广州可道技术

长按,识别二维码,加关注



[广州可道信息技术有限公司 原创文章] -- 转载请保留此信息

以上是关于CDN中运用OpenResty做有效访问时间校验的主要内容,如果未能解决你的问题,请参考以下文章

网站访问慢,用CDN加速好还是直接升级服务器好?

基于Openresty实现业务安全防护

Nginx配置缓存服务器

使用 opm 包管理器从 openresty 访问 socket.ltn12

我眼中的 Nginx:深入 Nginx/Openresty 服务里的 DNS 解析

Nginx视频教程 反向代理/https/openresty/lua实战