2017-04-05 111 views
-1

我使用lua與nginx。要訪問我的ES羣集,我使用lua代碼進行配置。我想知道的代碼是如何工作..任何人都可以解釋下面的LUA代碼是如何工作的?

-- get URL 
local uri = ngx.var.uri 

-- get method 
local method = ngx.req.get_method() 

local allowed = false 

for path, methods in pairs(restrictions[role]) do 
    -- path matched rules? 
    local p = string.match(uri, path) 

    -- method matched rules? 
    local m = nil 
    for _, _method in pairs(methods) do 
    m = m and m or string.match(method, _method) 
    end 

    if p and m then 
    allowed = true 
    break 
    end 
end 

if not allowed then 
    return write403Message() 
end 

讓被URL: http://localhost/_GETmethod:GETpath:/_GET 然後

local p = string.match(uri, path) -->Then p variable has value GET(i.e p=GET) 

糾正我,如果我錯了嗎?

for _, _method in pairs(methods) do 
     m = m and m or string.match(method, _method) 
     end 

上面的代碼片段會做什麼?

回答

1

我建議你到Lua參考手冊,如果你想知道的代碼做什麼:

https://www.lua.org/manual/5.3/manual.html#pdf-string.match

如果你想知道什麼string.match在你的榜樣回報您可以使用打印功能。

例如:

p = string.match(uri, path) 
print(p) 

對於示例:

讓被URL:http://localhost/_GET,method:GET,路徑:/ _ GET然後

局部p = string.match(URI,路徑) - >然後p變量的值爲GET(即 p = GET)

p會實際參考"/_GET"

/_GET是你的模式。 string.match將返回這個簡單的dinstinct模式的匹配就是模式本身。

例如,如果您要求例如匹配任何數字,例如您會從字符串中獲得實際數字。

相關問題