Nginx及其姊妹OpenResty皆可用Lua語言來客製化系統功能,Redis、Unity 3D也是有支援Lua。
這裡是講Lua在OpenResty上怎麼讀環境變數寫到Table物件,table是Lua裡較複雜的資料結構。
環境變數redis_host內容為:
10.0.1.13:7000,10.0.1.13:7001,10.0.1.13:7002,10.0.1.14:7000,10.0.1.14:7001,10.0.1.14:7002
Lua程式解析環境變數存到Table如下:
local hosts = os.getenv("redis_host")
local host_list = {}
for k, v in string.gmatch(hosts, "([%w.]+):(%w+)") do
local serv = {ip = k, port = tonumber(v)}
table.insert(host_list, serv)
end
.
]+):(%w+)")取得k(IP值)和v(port)值。所以比對IP部份會多一個小數點。這在resty指令下可以work。但到OpenResty,使用上有其限制,只能在init_by_lua區塊使用os.getenv,是故在OpenResty要分成兩段寫:
一、在init_by_lua區域取值設給Global變數,也只有在init_by_lua區塊才能使用Global變數。此處Global變數為redis_host
init_by_lua_block{
redis_host = os.getenv("redis_host")
}
二、在location區域的content_by_lua等區塊可以直接使用redis_host這個變數。