Nginx + LUA,如何输出文件?

在 Nginx + Lua 中,文件输出遇到了问题。我选择了 LUA,因为 nginx 的逻辑非常复杂,基于引荐人或子域等。

像 /img/am1/s/1.jpg 这样的请求,我需要检查 /somepath/am1/1.jpg 是否存在。如果存在,则输出它,否则代理请求到后端。

点赞
用户978069
用户978069
content_by_lua '
    local file = "/path..."  # 定义文件路径
    local f = io.open(file, "rb")  # 以只读二进制模式打开文件
    local content = f:read("*all")  # 读取全部内容
    f:close()  # 关闭文件
    ngx.print(content)  # 输出文件内容
';
2014-06-26 10:59:27
用户1592008
用户1592008

如果有人需要知道如何从文件中输出最后n行:

location /service-man/log {
            default_type 'text/plain';
            content_by_lua '

                    local log_path = "/path/to/log.log"
                    -- 打开一个读取文件
                    file = io.open(log_path, "r")
                    if file==nil
                    then
                        ngx.say(log_path .. " 无法读取或不存在")
                        return
                    end

                    -- 设置默认输入文件
                    io.input(file)

                    local 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兼容。

如果您知道如何以更优化的方式进行操作,请分享。

2015-07-17 18:55:40