一種輕量的openresty路由設計

2022-01-30 04:06:22 字數 2441 閱讀 3660

但出於安全性考慮,決定給訪問的介面位址加個白名單功能,不在白名單的位址不允許訪問。

這裡載入了乙個對應目錄的route_config.lua,由於這個config檔案內容較小,所以我把內容直接列了出來:

--

白名單列表

local whitelist =

--路由重寫列表

local rewritelist =

return

然後在content_by_lua_file 前面加這麼一句**:

你會發現白名單功能就這麼完成了,而且多次測試後發現單純的路由查詢功能會比lusty快一倍以上。

1

local

_m =

2local mt =

3local tinsert = table.insert

4local tconcat = table.concat

5local

tonumber = tonumber

6local

function

uritoken(uri)

7local ret ={}

8for token in uri:gmatch("

[^/.]+

") do

9tinsert(ret,token)

10end

11return

ret12

end13

14function

_m.new(self,rconfig)

15local tab ={}

16local routemap = require

(rconfig)

17local route_data ={}

18local whitelist =routemap.whitelist

19for i=1,#whitelist do

20local ret =uritoken(whitelist[i])

21if #ret > 0

then

22 tinsert(route_data,tconcat())

23end

24end

25local rewritelist =routemap.rewritelist

26local x = 1

27local rewrite_data ={}

28local rewrite_urls ={}

29for k,v in

pairs(rewritelist) do

30 tinsert(rewrite_data,tconcat())

31tinsert(rewrite_urls,v)

32 x = x + 1

33end

34 tab.rewrite_urls =rewrite_urls

35 tab.rewrite_pattern = tconcat(rewrite_data,'|'

)36 tab.route_pattern = tconcat(route_data,'|'

)37return

setmetatable

(tab, mt)

38end

3940

function

_m.route_verify(self)

41local uri =ngx.var.api_path

42local ret =uritoken(uri)

43 uri = tconcat(ret,'/'

)44 ngx.var.api_path =uri

45local m =ngx.re.match(uri,self.route_pattern)

46if m == nil

then

47 m =ngx.re.match(uri,self.rewrite_pattern)

48if m == nil

then

49 ngx.exit(404)50

else

51local locant = ngx.re.match(next(m,#m), "

^z(\\d+)z")

52 ngx.var.api_path = self.rewrite_urls[tonumber(locant[1

])]53

end54

end55

end56

return

_m

關於杯子量水的一種演算法

題目 有兩個水罐a,b,容量分別為x,y,均為不小於1的整數,在沒有任何刻度記號的下,可以量出那些數量單位的水 輸入示例 4 3輸出示例 1 2 3 4 5 6 7 輸入示例2 1 2輸出示例2 1 2 3 演算法 以乙個5公升乙個6公升杯子倒3公升水為例,這兩個杯子根據裝的水量不同,共有22種狀態...

一種理想的大資料量分頁查詢方案

本文旨在介紹一種對資料庫中的大資料量 進行分頁查詢的實現方法,該方法對應用伺服器 資料庫伺服器 查詢客戶端的cpu和記憶體占用都較低,查詢速度較快,是乙個較為理想的分頁查詢實現方案。1 問題的提出 在軟體開發中,大資料量的查詢是乙個常見的問題,經常會遇到對大量資料進行查詢的場景。常見的對大資料量查詢...

Nancy總結(一)Nancy乙個輕量的MVC框架

nancy是乙個基於.net 和mono 構建的http服務框架,是乙個非常輕量級的web框架。nancy 的特點 1.建立了自下而上的,而不是簡單地dsl的現有框架。刪除很多不必要的限制和特性,盡可能的只引用你需要的元件。使其保持簡單。2.隨處執行。nancy不是建立在任何特定的平台下的的,它可以...