在Nginx + Lua中,文件输出遇到了问题。我选择了LUA,因为nginx的逻辑相当复杂,基于referrer或子域名等。
像/img/am1/s/1.jpg这样的请求,我需要检查/somepath/am1/1.jpg是否存在。如果它存在,则输出它,否则将请求代理到后端。
好的,找到了
content_by_lua '
local file = "/path..."
local f = io.open(file, "rb")
local content = f:read("*all")
f:close()
ngx.print(content)
';
location /service-man/log {
default_type 'text/plain';
content_by_lua '
local log_path = "/path/to/log.log"
-- Opens a file in read
file = io.open(log_path, "r")
if file==nil
then
ngx.say(log_path .. " can\'t read or does not exists")
return
end
-- sets the default input file
io.input(file)
local lines = {}
-- read the lines in table lines
for line in io.lines() do
table.insert(lines, line)
end
io.close(file)
log_limit = 10
if #lines < log_limit then
log_start = 0
else
log_len = #lines
log_start = log_len - log_limit
end
local one_line = ""
for i, line in ipairs(lines) do
if i > log_start then
one_line = one_line .. line .. "\\n"
end
end
ngx.say(one_line)
';
}
应该与nginx/1.6.2和Lua 5.3兼容。
如果您知道如何更优化地完成,请分享。
ngx.exec
让nginx服务文件会更加高效。 - Alexey Ten